diff --git a/iguana/dpow/dpow_network.c b/iguana/dpow/dpow_network.c index 07d0dae40..e57385148 100755 --- a/iguana/dpow/dpow_network.c +++ b/iguana/dpow/dpow_network.c @@ -184,7 +184,7 @@ void dpow_nanoutxoset(struct dpow_nanoutxo *np,struct dpow_block *bp,int32_t isr void dpow_ratify_update(struct supernet_info *myinfo,struct dpow_info *dp,struct dpow_block *bp,uint8_t senderind,int8_t bestk,uint64_t bestmask,uint64_t recvmask,bits256 srcutxo,uint16_t srcvout,bits256 destutxo,uint16_t destvout,uint8_t siglens[2],uint8_t sigs[2][76]) { - int32_t i,bestmatches = 0,matches = 0; + int32_t i,matchk,ratifybestk,bestmatches = 0,matches = 0; uint64_t matchmask,ratifybestmask; //char str[65],str2[65]; //printf("senderind.%d num.%d %s %s\n",senderind,bp->numnotaries,bits256_str(str,srcutxo),bits256_str(str2,destutxo)); if ( bp->isratify != 0 && senderind >= 0 && senderind < bp->numnotaries && bits256_nonz(srcutxo) != 0 && bits256_nonz(destutxo) != 0 ) @@ -214,34 +214,47 @@ void dpow_ratify_update(struct supernet_info *myinfo,struct dpow_info *dp,struct bp->notaries[bp->myind].ratifybestk = bp->ratifybestk; bp->notaries[bp->myind].ratifybestmask = bp->ratifybestmask; bp->notaries[bp->myind].ratifyrecvmask = bp->ratifyrecvmask; + ratifybestk = bp->ratifybestk; + ratifybestmask = bp->ratifybestmask; if ( bp->ratifybestk >= 0 ) { - for (i=0; inumnotaries; i++) + matchk = -1; + for (matchmask=i=0; inumnotaries; i++) { if ( bp->ratifybestk >= 0 && bp->notaries[i].ratifybestk == bp->ratifybestk && bp->notaries[i].ratifybestmask == bp->ratifybestmask ) { - matches++; + if ( matches++ < bp->minsigs ) + { + matchmask |= (1LL << i); + if ( matches == bp->minsigs ) + matchk = i; + } if ( ((1LL << i) & bp->ratifybestmask) != 0 ) bestmatches++; } } + if ( bestmatches < bp->minsigs && matches >= bp->minsigs ) + { + printf("alternate mask.(%d %llx) as matches.%d vs bestmatches.%d\n",matchk,(long long)matchbestmask,matches,bestmatches); + + } if ( bestmatches >= bp->minsigs ) { - if ( bp->pendingratifybestk != bp->ratifybestk || bp->pendingratifybestmask != bp->ratifybestmask ) + if ( bp->pendingratifybestk != ratifybestk || bp->pendingratifybestmask != ratifybestmask ) { - printf("new PENDING RATIFY BESTK (%d %llx)\n",bp->ratifybestk,(long long)bp->ratifybestmask); - bp->pendingratifybestk = bp->ratifybestk; - bp->pendingratifybestmask = bp->ratifybestmask; - dpow_signedtxgen(myinfo,dp,bp->destcoin,bp,bp->ratifybestk,bp->ratifybestmask,bp->myind,DPOW_SIGBTCCHANNEL,1,1); + printf("new PENDING RATIFY BESTK (%d %llx)\n",ratifybestk,(long long)ratifybestmask); + bp->pendingratifybestk = ratifybestk; + bp->pendingratifybestmask = ratifybestmask; + dpow_signedtxgen(myinfo,dp,bp->destcoin,bp,ratifybestk,ratifybestmask,bp->myind,DPOW_SIGBTCCHANNEL,1,1); } - if ( bp->ratifysigmasks[1] == bp->ratifybestmask ) // have all sigs + if ( bp->ratifysigmasks[1] == ratifybestmask ) // have all sigs { if ( bp->state < 1000 ) - dpow_sigscheck(myinfo,dp,bp,bp->myind,1,bp->ratifybestk,bp->ratifybestmask,bp->ratified_pubkeys,bp->numratified); - if ( bp->ratifysigmasks[0] == bp->ratifybestmask ) // have all sigs + dpow_sigscheck(myinfo,dp,bp,bp->myind,1,ratifybestk,ratifybestmask,bp->ratified_pubkeys,bp->numratified); + if ( bp->ratifysigmasks[0] == ratifybestmask ) // have all sigs { if ( bp->state != 0xffffffff ) - dpow_sigscheck(myinfo,dp,bp,bp->myind,0,bp->ratifybestk,bp->ratifybestmask,bp->ratified_pubkeys,bp->numratified); + dpow_sigscheck(myinfo,dp,bp,bp->myind,0,ratifybestk,ratifybestmask,bp->ratified_pubkeys,bp->numratified); } //else printf("ratify srcmask.%llx != bestmask.%llx\n",(long long)bp->ratifysigmasks[0],(long long)bp->bestmask); } //else printf("ratify destmask.%llx != bestmask.%llx\n",(long long)bp->ratifysigmasks[1],(long long)bp->bestmask); } diff --git a/iguana/tests/ratifyC_7776 b/iguana/tests/ratifyC_7776 index a147d32b2..09f4f7b7d 100755 --- a/iguana/tests/ratifyC_7776 +++ b/iguana/tests/ratifyC_7776 @@ -1,3 +1,3 @@ #!/bin/bash #!/bin/bash -curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"dpow\",\"method\":\"ratify\",\"source\":\"REVS\",\"minsigs\":8,\"start\":1478381719,\"ratified\":[{\"destprevtxid0\":\"3e9475fd4798b3b451fc3c85e5569f7a80650cae5787f705869b3a7e3b190dd7\",\"destprevvout0\":0,\"srcprevtxid0\":\"034b2505b15b7dbc320aab1697c2e2c9426c9aa9184219387a287eef2905f85b\",\"srcprevvout0\":1,\"handle\":\"testA\",\"pubkey\":\"03b7621b44118017a16043f19b30cc8a4cfe068ac4e42417bae16ba460c80f3828\"},{\"handle\":\"testB\",\"pubkey\":\"02ebfc784a4ba768aad88d44d1045d240d47b26e248cafaf1c5169a42d7a61d344\"},{\"handle\":\"artik_AE\",\"pubkey\":\"029acf1dcd9f5ff9c455f8bb717d4ae0c703e089d16cf8424619c491dff5994c90\"},{\"handle\":\"artik_EU\",\"pubkey\":\"03f54b2c24f82632e3cdebe4568ba0acf487a80f8a89779173cdb78f74514847ce\"},{\"handle\":\"artik_NA\",\"pubkey\":\"0224e31f93eff0cc30eaf0b2389fbc591085c0e122c4d11862c1729d090106c842\"},{\"handle\":\"artik_SH\",\"pubkey\":\"02bdd8840a34486f38305f311c0e2ae73e84046f6e9c3dd3571e32e58339d20937\"},{\"handle\":\"badass_EU\",\"pubkey\":\"0209d48554768dd8dada988b98aca23405057ac4b5b46838a9378b95c3e79b9b9e\"},{\"handle\":\"badass_NA\",\"pubkey\":\"02afa1a9f948e1634a29dc718d218e9d150c531cfa852843a1643a02184a63c1a7\"},{\"handle\":\"badass_SH\",\"pubkey\":\"026b49dd3923b78a592c1b475f208e23698d3f085c4c3b4906a59faf659fd9530b\"},{\"handle\":\"crackers_EU\",\"pubkey\":\"0340c66cf2c41c41efb420af57867baa765e8468c12aa996bfd816e1e07e410728\"},{\"handle\":\"crackers_NA\",\"pubkey\":\"029e1c01131974f4cd3f564cc0c00eb87a0f9721043fbc1ca60f9bd0a1f73f64a1\"},{\"handle\":\"crackers_SH\",\"pubkey\":\"02313d72f9a16055737e14cfc528dcd5d0ef094cfce23d0348fe974b6b1a32e5f0\"},{\"handle\":\"durerus_EU\",\"pubkey\":\"02bcbd287670bdca2c31e5d50130adb5dea1b53198f18abeec7211825f47485d57\"},{\"handle\":\"eclips_EU\",\"pubkey\":\"02f236c98c025fccf8b24e96d489ca03a4345d0ec18660c03c67a522bc827b614e\"},{\"handle\":\"etszombi_EU\",\"pubkey\":\"0281b1ad28d238a2b217e0af123ce020b79e91b9b10ad65a7917216eda6fe64bf7\"},{\"handle\":\"farl4web_EU\",\"pubkey\":\"0300ecf9121cccf14cf9423e2adb5d98ce0c4e251721fa345dec2e03abeffbab3f\"},{\"handle\":\"fullmoon_AE\",\"pubkey\":\"0204a908350b8142698fdb6fabefc97fe0e04f537adc7522ba7a1e8f3bec003d4a\"},{\"handle\":\"grewal_AE\",\"pubkey\":\"034e804867936874d2dcef56ab5696f5fba059db069eb4f5c2887c61e6c60638b1\"},{\"handle\":\"grewal_NA\",\"pubkey\":\"03834b13ebaa060ecda0f94ed570a8d2a31ade1d3e29c79db6eb66887cfd0b800a\"},{\"handle\":\"grewal_SH\",\"pubkey\":\"03212a73f5d38a675ee3cdc6e82542a96c38c3d1c79d25a1ed2e42fcf6a8be4e68\"},{\"handle\":\"jeezy_EU\",\"pubkey\":\"023cb3e593fb85c5659688528e9a4f1c4c7f19206edc7e517d20f794ba686fd6d6\"},{\"handle\":\"karasugoi_NA\",\"pubkey\":\"02a348b03b9c1a8eac1b56f85c402b041c9bce918833f2ea16d13452309052a982\"},{\"handle\":\"kolo_AE\",\"pubkey\":\"02ffda5a0147e781308fe66a1774793eacd9b35829073746b217845cfe7577b7dc\"},{\"handle\":\"kolo_EU\",\"pubkey\":\"03f5c08dadffa0ffcafb8dd7ffc38c22887bd02702a6c9ac3440deddcf2837692b\"},{\"handle\":\"locomb_EU\",\"pubkey\":\"025c6d26649b9d397e63323d96db42a9d3caad82e1d6076970efe5056c00c0779b\"},{\"handle\":\"movecrypto_EU\",\"pubkey\":\"021ab53bc6cf2c46b8a5456759f9d608966eff87384c2b52c0ac4cc8dd51e9cc42\"},{\"handle\":\"nxtswe_EU\",\"pubkey\":\"032fb104e5eaa704a38a52c126af8f67e870d70f82977e5b2f093d5c1c21ae5899\"},{\"handle\":\"polycryptoblock_NA\",\"pubkey\":\"02708dcda7c45fb54b78469673c2587bfdd126e381654819c4c23df0e00b679622\"},{\"handle\":\"pondsea_AE\",\"pubkey\":\"032e1c213787312099158f2d74a89e8240a991d162d4ce8017d8504d1d7004f735\"},{\"handle\":\"pondsea_EU\",\"pubkey\":\"0225aa6f6f19e543180b31153d9e6d55d41bc7ec2ba191fd29f19a2f973544e29d\"},{\"handle\":\"pondsea_NA\",\"pubkey\":\"031bcfdbb62268e2ff8dfffeb9ddff7fe95fca46778c77eebff9c3829dfa1bb411\"},{\"handle\":\"pondsea_SH\",\"pubkey\":\"02209073bc0943451498de57f802650311b1f12aa6deffcd893da198a544c04f36\"},{\"handle\":\"proto_EU\",\"pubkey\":\"03681ffdf17c8f4f0008cefb7fa0779c5e888339cdf932f0974483787a4d6747c1\"},{\"handle\":\"rnr_EU\",\"pubkey\":\"0287aa4b73988ba26cf6565d815786caf0d2c4af704d7883d163ee89cd9977edec\"},{\"handle\":\"supernet_AE\",\"pubkey\":\"029d93ef78197dc93892d2a30e5a54865f41e0ca3ab7eb8e3dcbc59c8756b6e355\"},{\"handle\":\"supernet_EU\",\"pubkey\":\"02061c6278b91fd4ac5cab4401100ffa3b2d5a277e8f71db23401cc071b3665546\"},{\"handle\":\"supernet_NA\",\"pubkey\":\"033c073366152b6b01535e15dd966a3a8039169584d06e27d92a69889b720d44e1\"},{\"handle\":\"titomane_AE\",\"pubkey\":\"03cda6ca5c2d02db201488a54a548dbfc10533bdc275d5ea11928e8d6ab33c2185\"},{\"handle\":\"titomane_EU\",\"pubkey\":\"03517fcac101fed480ae4f2caf775560065957930d8c1facc83e30077e45bdd199\"},{\"handle\":\"titomane_NA\",\"pubkey\":\"0387046d9745414fb58a0fa3599078af5073e10347e4657ef7259a99cb4f10ad47\"},{\"handle\":\"titomane_SH\",\"pubkey\":\"035f49d7a308dd9a209e894321f010d21b7793461b0c89d6d9231a3fe5f68d9960\"},{\"handle\":\"vanbreuk_EU\",\"pubkey\":\"024f3cad7601d2399c131fd070e797d9cd8533868685ddbe515daa53c2e26004c3\"},{\"handle\":\"yassin_EU\",\"pubkey\":\"033fb7231bb66484081952890d9a03f91164fb27d392d9152ec41336b71b15fbd0\"}]}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"dpow\",\"method\":\"ratify\",\"source\":\"REVS\",\"minsigs\":8,\"start\":1478381719,\"ratified\":[{\"destprevtxid0\":\"3e9475fd4798b3b451fc3c85e5569f7a80650cae5787f705869b3a7e3b190dd7\",\"destprevvout0\":1,\"srcprevtxid0\":\"034b2505b15b7dbc320aab1697c2e2c9426c9aa9184219387a287eef2905f85b\",\"srcprevvout0\":0,\"handle\":\"testA\",\"pubkey\":\"03b7621b44118017a16043f19b30cc8a4cfe068ac4e42417bae16ba460c80f3828\"},{\"handle\":\"testB\",\"pubkey\":\"02ebfc784a4ba768aad88d44d1045d240d47b26e248cafaf1c5169a42d7a61d344\"},{\"handle\":\"artik_AE\",\"pubkey\":\"029acf1dcd9f5ff9c455f8bb717d4ae0c703e089d16cf8424619c491dff5994c90\"},{\"handle\":\"artik_EU\",\"pubkey\":\"03f54b2c24f82632e3cdebe4568ba0acf487a80f8a89779173cdb78f74514847ce\"},{\"handle\":\"artik_NA\",\"pubkey\":\"0224e31f93eff0cc30eaf0b2389fbc591085c0e122c4d11862c1729d090106c842\"},{\"handle\":\"artik_SH\",\"pubkey\":\"02bdd8840a34486f38305f311c0e2ae73e84046f6e9c3dd3571e32e58339d20937\"},{\"handle\":\"badass_EU\",\"pubkey\":\"0209d48554768dd8dada988b98aca23405057ac4b5b46838a9378b95c3e79b9b9e\"},{\"handle\":\"badass_NA\",\"pubkey\":\"02afa1a9f948e1634a29dc718d218e9d150c531cfa852843a1643a02184a63c1a7\"},{\"handle\":\"badass_SH\",\"pubkey\":\"026b49dd3923b78a592c1b475f208e23698d3f085c4c3b4906a59faf659fd9530b\"},{\"handle\":\"crackers_EU\",\"pubkey\":\"0340c66cf2c41c41efb420af57867baa765e8468c12aa996bfd816e1e07e410728\"},{\"handle\":\"crackers_NA\",\"pubkey\":\"029e1c01131974f4cd3f564cc0c00eb87a0f9721043fbc1ca60f9bd0a1f73f64a1\"},{\"handle\":\"crackers_SH\",\"pubkey\":\"02313d72f9a16055737e14cfc528dcd5d0ef094cfce23d0348fe974b6b1a32e5f0\"},{\"handle\":\"durerus_EU\",\"pubkey\":\"02bcbd287670bdca2c31e5d50130adb5dea1b53198f18abeec7211825f47485d57\"},{\"handle\":\"eclips_EU\",\"pubkey\":\"02f236c98c025fccf8b24e96d489ca03a4345d0ec18660c03c67a522bc827b614e\"},{\"handle\":\"etszombi_EU\",\"pubkey\":\"0281b1ad28d238a2b217e0af123ce020b79e91b9b10ad65a7917216eda6fe64bf7\"},{\"handle\":\"farl4web_EU\",\"pubkey\":\"0300ecf9121cccf14cf9423e2adb5d98ce0c4e251721fa345dec2e03abeffbab3f\"},{\"handle\":\"fullmoon_AE\",\"pubkey\":\"0204a908350b8142698fdb6fabefc97fe0e04f537adc7522ba7a1e8f3bec003d4a\"},{\"handle\":\"grewal_AE\",\"pubkey\":\"034e804867936874d2dcef56ab5696f5fba059db069eb4f5c2887c61e6c60638b1\"},{\"handle\":\"grewal_NA\",\"pubkey\":\"03834b13ebaa060ecda0f94ed570a8d2a31ade1d3e29c79db6eb66887cfd0b800a\"},{\"handle\":\"grewal_SH\",\"pubkey\":\"03212a73f5d38a675ee3cdc6e82542a96c38c3d1c79d25a1ed2e42fcf6a8be4e68\"},{\"handle\":\"jeezy_EU\",\"pubkey\":\"023cb3e593fb85c5659688528e9a4f1c4c7f19206edc7e517d20f794ba686fd6d6\"},{\"handle\":\"karasugoi_NA\",\"pubkey\":\"02a348b03b9c1a8eac1b56f85c402b041c9bce918833f2ea16d13452309052a982\"},{\"handle\":\"kolo_AE\",\"pubkey\":\"02ffda5a0147e781308fe66a1774793eacd9b35829073746b217845cfe7577b7dc\"},{\"handle\":\"kolo_EU\",\"pubkey\":\"03f5c08dadffa0ffcafb8dd7ffc38c22887bd02702a6c9ac3440deddcf2837692b\"},{\"handle\":\"locomb_EU\",\"pubkey\":\"025c6d26649b9d397e63323d96db42a9d3caad82e1d6076970efe5056c00c0779b\"},{\"handle\":\"movecrypto_EU\",\"pubkey\":\"021ab53bc6cf2c46b8a5456759f9d608966eff87384c2b52c0ac4cc8dd51e9cc42\"},{\"handle\":\"nxtswe_EU\",\"pubkey\":\"032fb104e5eaa704a38a52c126af8f67e870d70f82977e5b2f093d5c1c21ae5899\"},{\"handle\":\"polycryptoblock_NA\",\"pubkey\":\"02708dcda7c45fb54b78469673c2587bfdd126e381654819c4c23df0e00b679622\"},{\"handle\":\"pondsea_AE\",\"pubkey\":\"032e1c213787312099158f2d74a89e8240a991d162d4ce8017d8504d1d7004f735\"},{\"handle\":\"pondsea_EU\",\"pubkey\":\"0225aa6f6f19e543180b31153d9e6d55d41bc7ec2ba191fd29f19a2f973544e29d\"},{\"handle\":\"pondsea_NA\",\"pubkey\":\"031bcfdbb62268e2ff8dfffeb9ddff7fe95fca46778c77eebff9c3829dfa1bb411\"},{\"handle\":\"pondsea_SH\",\"pubkey\":\"02209073bc0943451498de57f802650311b1f12aa6deffcd893da198a544c04f36\"},{\"handle\":\"proto_EU\",\"pubkey\":\"03681ffdf17c8f4f0008cefb7fa0779c5e888339cdf932f0974483787a4d6747c1\"},{\"handle\":\"rnr_EU\",\"pubkey\":\"0287aa4b73988ba26cf6565d815786caf0d2c4af704d7883d163ee89cd9977edec\"},{\"handle\":\"supernet_AE\",\"pubkey\":\"029d93ef78197dc93892d2a30e5a54865f41e0ca3ab7eb8e3dcbc59c8756b6e355\"},{\"handle\":\"supernet_EU\",\"pubkey\":\"02061c6278b91fd4ac5cab4401100ffa3b2d5a277e8f71db23401cc071b3665546\"},{\"handle\":\"supernet_NA\",\"pubkey\":\"033c073366152b6b01535e15dd966a3a8039169584d06e27d92a69889b720d44e1\"},{\"handle\":\"titomane_AE\",\"pubkey\":\"03cda6ca5c2d02db201488a54a548dbfc10533bdc275d5ea11928e8d6ab33c2185\"},{\"handle\":\"titomane_EU\",\"pubkey\":\"03517fcac101fed480ae4f2caf775560065957930d8c1facc83e30077e45bdd199\"},{\"handle\":\"titomane_NA\",\"pubkey\":\"0387046d9745414fb58a0fa3599078af5073e10347e4657ef7259a99cb4f10ad47\"},{\"handle\":\"titomane_SH\",\"pubkey\":\"035f49d7a308dd9a209e894321f010d21b7793461b0c89d6d9231a3fe5f68d9960\"},{\"handle\":\"vanbreuk_EU\",\"pubkey\":\"024f3cad7601d2399c131fd070e797d9cd8533868685ddbe515daa53c2e26004c3\"},{\"handle\":\"yassin_EU\",\"pubkey\":\"033fb7231bb66484081952890d9a03f91164fb27d392d9152ec41336b71b15fbd0\"}]}"