From 6093d02de5b8eea7f875aef8ea2ba0f45c418bbb Mon Sep 17 00:00:00 2001 From: "Jonathan \"Duke\" Leto" Date: Sun, 3 Dec 2017 05:11:09 -0800 Subject: [PATCH] Specify minconf, fee, only grab correct contacts for current xtn, balance check fixes --- lib/Hush/App.pm | 2 ++ lib/Hush/List.pm | 37 ++++++++++++++++++++++++------------- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/lib/Hush/App.pm b/lib/Hush/App.pm index e8dc6bd..0a5d28c 100644 --- a/lib/Hush/App.pm +++ b/lib/Hush/App.pm @@ -7,6 +7,7 @@ use Hush::List; use Hush::Util qw/barf/; use Data::Dumper; use Hush::RPC; +use File::Slurp; my $COMMANDS = { "add" => \&add, @@ -86,6 +87,7 @@ sub remove { sub send_file { my ($list_name,$file) = @_; + barf "You must specify a Hushlist to send to" unless $list_name; barf "You must specify a file to attach" unless $file; if (-e $file) { diff --git a/lib/Hush/List.pm b/lib/Hush/List.pm index bfd430a..7ec72e8 100644 --- a/lib/Hush/List.pm +++ b/lib/Hush/List.pm @@ -317,7 +317,8 @@ sub send_memo { barf("Hushlist memo too large! $length > $MAX_MEMO") if ($length > $MAX_MEMO); - my $debug = sub { debug("send_memo: @_") }; + #my $debug = sub { debug("send_memo: @_") }; + my $debug = sub { warn "send_memo: @_" }; # each hush list has a sending_zaddr defined at time of creation # which is used to send to this list @@ -338,9 +339,8 @@ sub send_memo { unless (-e $list_members_file) { barf "No members file found for Hushlist $name!"; } - my %list_members = read_file( $list_members_file ) =~ /^(.*)$/mg ; + my %list_members = map { $_ => 1 } (read_file( $list_members_file )); $debug->("list_members=" . join(",",keys %list_members)); - use Data::Dumper; # Now that we have all the list member pseudonyms, look them # up in the appropriate chain @@ -360,17 +360,27 @@ sub send_memo { # This must be a string to make JSON elder gods happy my $amount = "0.00"; # amount is hidden in (z,z) xtns, so it does not identify list messages via metadata + + # override default amount with the amount key in this lists config file + if ($list_conf{amount}) { + $amount = $list_conf{amount} . ""; + } + my $raw_memo = unpack("h*",$memo); # backend wants hex-encoded memo-field $debug->("memo=$memo"); $debug->("raw_memo=$memo"); while (my ($addr, $contact) = each %contacts) { $debug->("adding $contact => $addr to recipients and sending: $memo"); - $list_addrs->{$contact} = { - address => $addr, - amount => $amount, - memo => $raw_memo, - }; + + # if this contact exists on this list, add them to recipient list for z_sendmany + if ($list_members{$contact}) { + $list_addrs->{$contact} = { + address => $addr, + amount => $amount, + memo => $raw_memo, + }; + } } warn Dumper [ $list_addrs ]; @@ -382,14 +392,16 @@ sub send_memo { my $fee = $ENV{HUSHLIST_FEE} ? sprintf "%.8f", $ENV{HUSHLIST_FEE} : $default_fee; my $balance = $rpc->z_gettotalbalance; my $zbalance = $balance->{private}; + my $tbalance = $balance->{transparent}; # this is the total cost to send the current Hush - # transaction to N recipients eac with $fee + # transaction to N recipients each with $fee my $recipients = (keys %contacts); my $total_cost = $fee * $recipients; - my $CURR = "HUSH"; + my $CURR = "HUSH"; $debug->("calculated total_cost=$total_cost $CURR for $recipients recipients"); + #TODO: taddr balance sometimes if ($zbalance < $fee) { $debug->("Insufficient zaddr balance to pay even one fee=$fee"); return; @@ -398,8 +410,6 @@ sub send_memo { return; } - # this could blow up for a bajillion reasons... - #try { # z_sendmany # Arguments: # 1. "fromaddress" (string, required) The taddr or zaddr to send the funds from. @@ -412,7 +422,8 @@ sub send_memo { # 3. minconf (numeric, optional, default=1) Only use funds confirmed at least this many times. # 4. fee (numeric, optional, default=0.0001) The fee amount to attach to this transaction. - my $opid = $rpc->z_sendmany($from, [values $list_addrs]); + my $minconf = 1; + my $opid = $rpc->z_sendmany($from, [values $list_addrs], $minconf, $fee); if (defined $opid) { $debug->("z_sendmany opid=$opid from $from");