Browse Source

Start making some stuff

master
Jonathan "Duke" Leto 7 years ago
commit
fc2ca015c6
  1. 5
      lib/Hush.pm
  2. 63
      lib/Hush/List.pm
  3. 34
      lib/Hush/RPC.pm

5
lib/Hush.pm

@ -0,0 +1,5 @@
package Hush;
use strict;
use warnings;
1;

63
lib/Hush/List.pm

@ -0,0 +1,63 @@
package Hush::List;
use strict;
use warnings;
use Hush::RPC;
use Try::Tiny;
#TODO: verify
my $MAX_RECIPIENTS = 55;
#TODO: create this if not specified
my $ZADDR = $ENV{HUSH_LIST_ZADDR} || die 'No funding zaddr found';
sub new {
my $hush_list = {};
$hush_list->{lists} = {};
return bless $hush_list, 'Hush::List';
}
sub new_list {
my ($self,$name) = @_;
my $lists = $self->{lists};
die "Hush list $name already exists" if $lists->{$name};
$lists->{$name}++;
return $self;
}
# send a message to a Hush List, weeeeee!
sub send_message {
my ($self,$from,$name,$message) = @_;
# TODO: better validation
die "Invalid Hush list name" unless $name;
die "Hush message cannot be empty" unless $message;
die "Invalid Hush from address: $from" unless $from;
my $hush_list = $self->{lists}->{$name} || die "No Hush List by the name of '$name' found";
my $rpc = Hush::RPC->new;
my $recipients = $hush_list->recipients;
die "Max recipients of $MAX_RECIPIENTS exceeded" if (@$recipients > $MAX_RECIPIENTS);
# prevent an easily searchable single xtn amount
my $amount = 1e-4 + (1e-5*rand());
# this could blow up for a bajillion reasons...
try {
$rpc->z_sendmany($from, $amount, $recipients, $memo);
} catch {
die "caught RPC error: $_";
} finally {
# TODO: notekeeping, logging, etc..
}
return $self;
}
sub new_taddr {}
sub new_zaddr {}
1;

34
lib/Hush/RPC.pm

@ -0,0 +1,34 @@
package Hush::RPC;
use strict;
use warnings;
use Bitcoin::RPC::Client;
sub new {
my $rpc = Bitcoin::RPC::Client->new(
user => $ENV{HUSH_RPC_USERNAME} || "hush",
password => $ENV{HUSH_RPC_PASSWORD} || "puppy",
host => "127.0.0.1",
);
return $rpc,
}
__DATA__
my $chaininfo = $btc->getblockchaininfo;
my $blocks = $chaininfo->{blocks};
# Set the transaction fee
# https://bitcoin.org/en/developer-reference#settxfee
my $settx = $btc->settxfee($feerate);
# Check your balance
# (JSON::Boolean objects must be passed as boolean parameters)
# https://bitcoin.org/en/developer-reference#getbalance
my $account = '';
my $balance = $btc->getbalance($account, 1, JSON::true);
# Send to an address
# https://bitcoin.org/en/developer-reference#sendtoaddress
my $txid = $rpc->sendtoaddress("1Ky49cu7FLcfVmuQEHLa1WjhRiqJU2jHxe","0.01");
1;
Loading…
Cancel
Save