@@ -851,20 +851,34 @@ bool AcceptToMemoryPoolWorker(CTxMemPool& pool, CValidationState& state, const C
851
851
}
852
852
}
853
853
}
854
- /*
855
- // TODO (BDAP): Implement link delete
856
854
else if (strOpType == " bdap_new_link_request" || strOpType == " bdap_new_link_accept" ) {
857
855
if (vvch.size () < 1 )
858
856
return state.Invalid (false , REJECT_INVALID, " bdap-txn-pubkey-parameter-not-found" );
859
857
if (vvch.size () > 3 )
860
858
return state.Invalid (false , REJECT_INVALID, " bdap-txn-too-many-parameters" );
861
-
859
+ // check for duplicate pubkeys
862
860
std::vector<unsigned char > vchPubKey = vvch[0 ];
863
861
if (LinkPubKeyExistsInMemPool (pool, vchPubKey, strOpType, strErrorMessage))
864
862
return state.Invalid (false , REJECT_ALREADY_KNOWN, " bdap-link-pubkey-txn-already-in-mempool" );
863
+
864
+ if (LinkPubKeyExists (vchPubKey))
865
+ return state.Invalid (false , REJECT_ALREADY_KNOWN, " bdap-link-duplicate-pubkey" );
866
+
867
+ CDomainEntry prevEntry;
868
+ if (GetDomainEntryPubKey (vchPubKey, prevEntry))
869
+ return state.Invalid (false , REJECT_ALREADY_KNOWN, " bdap-link-duplicate-pubkey-entry" );
870
+
871
+ if (vvch.size () > 1 ) {
872
+ std::vector<unsigned char > vchSharedPubKey = vvch[1 ];
873
+ if (LinkPubKeyExists (vchSharedPubKey))
874
+ return state.Invalid (false , REJECT_ALREADY_KNOWN, " bdap-link-duplicate-shared-pubkey" );
875
+
876
+ if (GetDomainEntryPubKey (vchSharedPubKey, prevEntry))
877
+ return state.Invalid (false , REJECT_ALREADY_KNOWN, " bdap-link-duplicate-shared-pubkey-entry" );
878
+ }
865
879
}
866
880
// TODO (BDAP): Implement link delete
867
-
881
+ /*
868
882
else if (strOpType == "bdap_delete_link_request" || strOpType == "bdap_delete_link_accept") {
869
883
if (vvch.size() < 1)
870
884
return state.Invalid(false, REJECT_INVALID, "bdap-txn-pubkey-parameter-not-found");
0 commit comments