diff --git a/src/avalanche/proofbuilder.h b/src/avalanche/proofbuilder.h
--- a/src/avalanche/proofbuilder.h
+++ b/src/avalanche/proofbuilder.h
@@ -39,7 +39,7 @@
 
 public:
     ProofBuilder(uint64_t sequence_, int64_t expirationTime_, CKey masterKey_,
-                 const CScript &payoutScriptPubKey_ = CScript())
+                 const CScript &payoutScriptPubKey_)
         : sequence(sequence_), expirationTime(expirationTime_),
           masterKey(std::move(masterKey_)),
           payoutScriptPubKey(payoutScriptPubKey_) {}
diff --git a/src/avalanche/test/peermanager_tests.cpp b/src/avalanche/test/peermanager_tests.cpp
--- a/src/avalanche/test/peermanager_tests.cpp
+++ b/src/avalanche/test/peermanager_tests.cpp
@@ -92,7 +92,8 @@
                const CKey &master = CKey::MakeCompressedKey(),
                int64_t sequence = 1, uint32_t height = 100,
                bool is_coinbase = false, int64_t expirationTime = 0) {
-        ProofBuilder pb(sequence, expirationTime, master);
+        ProofBuilder pb(sequence, expirationTime, master,
+                        UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
         for (const auto &outpoint : outpoints) {
             BOOST_CHECK(pb.addUTXO(std::get<0>(outpoint), std::get<1>(outpoint),
                                    height, is_coinbase, key));
@@ -718,7 +719,8 @@
 
     // Duplicated input.
     {
-        ProofBuilder pb(0, 0, CKey::MakeCompressedKey());
+        ProofBuilder pb(0, 0, CKey::MakeCompressedKey(),
+                        UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
         COutPoint o(txid1, 3);
         BOOST_CHECK(pb.addUTXO(o, v, height, false, key));
         BOOST_CHECK(
diff --git a/src/avalanche/test/processor_tests.cpp b/src/avalanche/test/processor_tests.cpp
--- a/src/avalanche/test/processor_tests.cpp
+++ b/src/avalanche/test/processor_tests.cpp
@@ -166,7 +166,7 @@
         coins.AddCoin(outpoint, Coin(CTxOut(amount, script), height, false),
                       false);
 
-        ProofBuilder pb(0, 0, masterpriv);
+        ProofBuilder pb(0, 0, masterpriv, UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
         BOOST_CHECK(pb.addUTXO(outpoint, amount, height, false, key));
         return pb.build();
     }
@@ -1233,7 +1233,7 @@
 
     auto buildProof = [&](const COutPoint &outpoint, uint64_t sequence,
                           uint32_t height = 10) {
-        ProofBuilder pb(sequence, 0, key);
+        ProofBuilder pb(sequence, 0, key, UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
         BOOST_CHECK(
             pb.addUTXO(outpoint, PROOF_DUST_THRESHOLD, height, false, key));
         return pb.build();
@@ -1377,7 +1377,7 @@
                            height, isCoinbase),
                       false);
     }
-    ProofBuilder pb(1, tipMTP + 1, key);
+    ProofBuilder pb(1, tipMTP + 1, key, UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
     BOOST_CHECK(pb.addUTXO(utxo, amount, height, isCoinbase, key));
     auto proof2 = pb.build();
 
diff --git a/src/avalanche/test/proof_tests.cpp b/src/avalanche/test/proof_tests.cpp
--- a/src/avalanche/test/proof_tests.cpp
+++ b/src/avalanche/test/proof_tests.cpp
@@ -49,7 +49,7 @@
     const uint64_t sequence = InsecureRandBits(64);
     const int64_t expiration = InsecureRandBits(64);
 
-    ProofBuilder pb(sequence, expiration, key);
+    ProofBuilder pb(sequence, expiration, key, UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
 
     for (int i = 0; i < 3; i++) {
         key.MakeNewKey(true);
@@ -920,7 +920,8 @@
                               const uint32_t h, const bool is_coinbase,
                               const CKey &k, int64_t expirationTime = 0) {
         // Generate a proof that match the UTXO.
-        ProofBuilder pb(0, expirationTime, key);
+        ProofBuilder pb(0, expirationTime, key,
+                        UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
         BOOST_CHECK(pb.addUTXO(o, v, h, is_coinbase, k));
         ProofRef p = pb.build();
 
@@ -998,7 +999,8 @@
 
     // No stake
     {
-        ProofRef p = ProofBuilder(0, 0, key).build();
+        ProofRef p =
+            ProofBuilder(0, 0, key, UNSPENDABLE_ECREG_PAYOUT_SCRIPT).build();
 
         ProofValidationState state;
         BOOST_CHECK(!p->verify(PROOF_DUST_THRESHOLD, chainman, state));
@@ -1024,7 +1026,7 @@
             };
 
         for (auto it = testCases.begin(); it != testCases.end(); ++it) {
-            ProofBuilder pb(0, 0, key);
+            ProofBuilder pb(0, 0, key, UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
             BOOST_CHECK(
                 pb.addUTXO(pkh_outpoint, std::get<0>(*it), height, false, key));
             ProofRef p = pb.build();
@@ -1038,7 +1040,7 @@
 
     // Duplicated input
     {
-        ProofBuilder pb(0, 0, key);
+        ProofBuilder pb(0, 0, key, UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
         BOOST_CHECK(pb.addUTXO(pkh_outpoint, value, height, false, key));
         ProofRef p = TestProofBuilder::buildDuplicatedStakes(pb);
 
@@ -1055,7 +1057,7 @@
         coins.AddCoin(other_pkh_outpoint, Coin(other_pkh_output, height, false),
                       false);
 
-        ProofBuilder pb(0, 0, key);
+        ProofBuilder pb(0, 0, key, UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
         BOOST_CHECK(pb.addUTXO(pkh_outpoint, value, height, false, key));
         BOOST_CHECK(pb.addUTXO(other_pkh_outpoint, value, height, false, key));
         ProofRef p = TestProofBuilder::buildWithReversedOrderStakes(pb);
@@ -1128,7 +1130,7 @@
     }
 
     auto computeProofId = [&]() {
-        ProofBuilder pb(0, 0, key);
+        ProofBuilder pb(0, 0, key, UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
         for (const COutPoint &outpoint : outpoints) {
             BOOST_CHECK(pb.addUTXO(outpoint, value, height, false, key));
         }
@@ -1144,7 +1146,7 @@
 
 BOOST_AUTO_TEST_CASE(get_staked_amount) {
     auto key = CKey::MakeCompressedKey();
-    ProofBuilder pb(10, 11, key);
+    ProofBuilder pb(10, 11, key, UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
 
     {
         ProofRef p = pb.build();
diff --git a/src/avalanche/test/proofpool_tests.cpp b/src/avalanche/test/proofpool_tests.cpp
--- a/src/avalanche/test/proofpool_tests.cpp
+++ b/src/avalanche/test/proofpool_tests.cpp
@@ -47,7 +47,7 @@
     const COutPoint conflictingOutpoint{TxId(GetRandHash()), 0};
 
     auto buildProofWithSequence = [&](uint64_t sequence) {
-        ProofBuilder pb(sequence, 0, key);
+        ProofBuilder pb(sequence, 0, key, UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
         BOOST_CHECK(
             pb.addUTXO(conflictingOutpoint, 10 * COIN, 123456, false, key));
         return pb.build();
@@ -123,7 +123,7 @@
 
     auto buildProofWithSequenceAndOutpoints =
         [&](uint64_t sequence, const std::vector<COutPoint> &outpoints) {
-            ProofBuilder pb(sequence, 0, key);
+            ProofBuilder pb(sequence, 0, key, UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
             for (const COutPoint &outpoint : outpoints) {
                 BOOST_CHECK(
                     pb.addUTXO(outpoint, 10 * COIN, 123456, false, key));
@@ -198,7 +198,7 @@
     const COutPoint conflictingOutpoint{TxId(GetRandHash()), 0};
 
     auto buildProofWithSequence = [&](uint64_t sequence) {
-        ProofBuilder pb(sequence, 0, key);
+        ProofBuilder pb(sequence, 0, key, UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
         BOOST_CHECK(
             pb.addUTXO(conflictingOutpoint, 10 * COIN, 123456, false, key));
         return pb.build();
@@ -314,7 +314,7 @@
     const CKey key = CKey::MakeCompressedKey();
     auto buildProofWithRandomOutpoints = [&](uint32_t score) {
         int numOutpoints = InsecureRand32() % 10 + 1;
-        ProofBuilder pb(0, 0, key);
+        ProofBuilder pb(0, 0, key, UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
         for (int i = 0; i < numOutpoints; i++) {
             Amount amount = 1 * COIN;
             if (i == numOutpoints - 1) {
diff --git a/src/avalanche/test/util.h b/src/avalanche/test/util.h
--- a/src/avalanche/test/util.h
+++ b/src/avalanche/test/util.h
@@ -8,13 +8,18 @@
 #include <avalanche/proof.h>
 #include <avalanche/proofbuilder.h>
 #include <key.h>
+#include <script/script.h>
 
-#include <cstdio>
+#include <vector>
 
 namespace avalanche {
 
 constexpr uint32_t MIN_VALID_PROOF_SCORE = 100 * PROOF_DUST_THRESHOLD / COIN;
 
+const CScript UNSPENDABLE_ECREG_PAYOUT_SCRIPT =
+    CScript() << OP_DUP << OP_HASH160 << std::vector<uint8_t>(20, 0)
+              << OP_EQUALVERIFY << OP_CHECKSIG;
+
 ProofRef buildRandomProof(CChainState &active_chainstate, uint32_t score,
                           int height = 100,
                           const CKey &masterKey = CKey::MakeCompressedKey());
diff --git a/src/avalanche/test/util.cpp b/src/avalanche/test/util.cpp
--- a/src/avalanche/test/util.cpp
+++ b/src/avalanche/test/util.cpp
@@ -33,7 +33,8 @@
         coins.AddCoin(o, Coin(CTxOut(v, script), height, is_coinbase), false);
     }
 
-    ProofBuilder pb(0, std::numeric_limits<uint32_t>::max(), masterKey);
+    ProofBuilder pb(0, std::numeric_limits<uint32_t>::max(), masterKey,
+                    UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
     BOOST_CHECK(pb.addUTXO(o, v, height, is_coinbase, std::move(key)));
     return pb.build();
 }
diff --git a/src/test/serialize_tests.cpp b/src/test/serialize_tests.cpp
--- a/src/test/serialize_tests.cpp
+++ b/src/test/serialize_tests.cpp
@@ -6,6 +6,7 @@
 
 #include <avalanche/proof.h>
 #include <avalanche/proofbuilder.h>
+#include <avalanche/test/util.h>
 #include <hash.h>
 #include <streams.h>
 #include <util/strencodings.h>
@@ -428,7 +429,8 @@
     const char charstrval[16] = "testing charstr";
     CMutableTransaction txval;
     CTransactionRef tx_ref{MakeTransactionRef(txval)};
-    avalanche::ProofBuilder pb(0, 0, CKey::MakeCompressedKey());
+    avalanche::ProofBuilder pb(0, 0, CKey::MakeCompressedKey(),
+                               avalanche::UNSPENDABLE_ECREG_PAYOUT_SCRIPT);
     avalanche::ProofRef proofval = pb.build();
     CSerializeMethodsTestSingle methodtest1(intval, boolval, stringval,
                                             charstrval, tx_ref, proofval);