Browse Source

Sietch v0 prototype

sietch
Duke Leto 5 years ago
parent
commit
773719b66c
  1. 31
      src/wallet/rpcwallet.cpp

31
src/wallet/rpcwallet.cpp

@ -4428,6 +4428,9 @@ UniValue z_sendmany(const UniValue& params, bool fHelp)
// This logic will need to be updated if we add a new shielded pool
bool fromSprout = !(fromTaddr || fromSapling);
if (fromSprout)
throw JSONRPCError(RPC_INVALID_PARAMETER, "Cannot send from a Sprout zaddr, only Sapling zaddrs supported.");
UniValue outputs = params[1].get_array();
if (outputs.size()==0)
@ -4533,17 +4536,39 @@ UniValue z_sendmany(const UniValue& params, bool fHelp)
nTotalOut += nAmount;
}
// Byrsa: Add some magic privacy zdust
unsigned int MIN_ZOUTS=7;
// SIETCH: Sprinkle our cave with some magic privacy zdust
// End goal is to have this be as large as possible without slowing xtns down too much
// A value of 7 will provide much stronger linkability privacy versus pre-Sietch operations
// We should also give RPC interface a way to specify MIN_ZOUTS
unsigned int MIN_ZOUTS=2;
while (zaddrRecipients.size() < MIN_ZOUTS) {
// OK, we identify this xtn as needing privacy zdust, we must decide how much, non-deterministically
int nAmount = 0;
int decider = 1 + GetRandInt(100); // random int between 1 and 100
string memo = "f600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
// TODO: options for address: hardcoded or randomized, unspendable or valid
// We will send various amount=0 to this wallet if our amount of zdust
// is below threshold, otherwise to unspendable or fixed out-of-wallet zaddrs
string address = "zs1aq4xnrkjlnxx0zesqye7jz3dfrf3rjh7q5z6u8l6mwyqqaam3gx3j2fkqakp33v93yavq46j83q"; // duke donation zaddr
string address;
// Which zaddr we send to is randomly chosen...
if (decider % 2) {
address = "zs1jwme0lrt2egh2z9vqtnm69kd7spklmuqjae4nass0ew68l0nn7rqduy7ajq0dhl48n2e6hq8gsx";
} else {
address = "zs15nd94xku908yeml6q6hfsfdv0fjcv82p5d5r0yga4k0l2z4mw2dgadlg9cgsqjvcv94us4vpezp";
}
zaddrRecipients.push_back( SendManyRecipient(address, nAmount, memo) );
fprintf(stderr,"%s: adding %s as zdust receiver\n");
// 25% chance of adding another zout
if (decider % 4 == 3) {
address = "zs1uchnxajsmn70gsptkthxcytqsr89rsle6rq66sp3gnn2cqdt8lpq97dv98plhv3vjmrp2zkr8da";
zaddrRecipients.push_back( SendManyRecipient(address, nAmount, memo) );
fprintf(stderr,"%s: adding %s as zdust receiver\n");
}
}
int nextBlockHeight = chainActive.Height() + 1;

Loading…
Cancel
Save