142 lines
3.7 KiB
Perl
142 lines
3.7 KiB
Perl
|
|
package Nicehashapi;
|
|
|
|
use Moo;
|
|
use strictures 2;
|
|
use namespace::clean;
|
|
use File::Slurp;
|
|
use Data::Printer;
|
|
use Mojo::UserAgent;
|
|
use Digest::SHA qw(hmac_sha256_hex);;
|
|
use UUID::Tiny ':std';
|
|
use Time::HiRes qw(gettimeofday);
|
|
use Encode qw(decode encode);
|
|
use Data::Dumper;
|
|
|
|
has key => (
|
|
is => 'ro',
|
|
);
|
|
|
|
has secret => (
|
|
is => 'ro',
|
|
);
|
|
|
|
has organisation_id => (
|
|
is => 'ro',
|
|
);
|
|
|
|
# my $key = '8bcbda58-5a26-4ce4-8e61-3a0fd894cfbb';
|
|
# my $secret = '59dc1ee5-a0e6-4ba6-9a9c-a043c350b88b84266786-2d14-4b9f-9ae5-d168ed8376b7';
|
|
# my $organisation_id = '4c615374-bf85-42fd-860d-b1bf4568c01f';
|
|
|
|
sub get_payouts {
|
|
my ( $self, $page, $size) = @_;
|
|
return _request($self, 'GET', '/main/api/v2/mining/rigs/payouts', "page=$page&size=$size", undef);
|
|
}
|
|
|
|
sub get_currencies {
|
|
my ( $self) = @_;
|
|
return _request($self, 'GET', '/main/api/v2/public/currencies/', '', undef);
|
|
}
|
|
|
|
sub get_prices {
|
|
my ( $self) = @_;
|
|
return _request($self, 'GET', '/exchange/api/v2/info/prices', '', undef);
|
|
}
|
|
|
|
sub get_hashpowerEarnings {
|
|
my ( $self, $currencies) = @_;
|
|
return _request($self, 'GET', '/main/api/v2/accounting/hashpowerEarnings/' . $currencies, '', undef);
|
|
}
|
|
|
|
sub get_myOrders {
|
|
my ( $self) = @_;
|
|
return _request($self, 'GET', '/exchange/api/v2/info/myOrders', '', undef);
|
|
}
|
|
|
|
sub get_accounts2 {
|
|
my ( $self, $extendedResponse, $fiat) = @_;
|
|
return _request($self, 'GET', '/main/api/v2/accounting/accounts2', "extendedResponse=$extendedResponse&fiat=$fiat", undef);
|
|
}
|
|
|
|
sub get_accounting_activity {
|
|
my ( $self, $currency, $type, $stage, $limit ) = @_;
|
|
my $query;
|
|
|
|
if ( defined $limit ) {
|
|
$query = "limit=$limit";
|
|
}
|
|
|
|
if ( defined $type ) {
|
|
$query .= "&type=$type";
|
|
}
|
|
|
|
if ( defined $stage ) {
|
|
$query .= "&stage=$stage";
|
|
}
|
|
|
|
return _request($self, 'GET', '/main/api/v2/accounting/activity/'.$currency, $query, undef);
|
|
# return _request($self, 'GET', '/main/api/v2/accounting/activity/'.$currency, '' , undef);
|
|
}
|
|
|
|
sub _request {
|
|
my ( $self, $method, $path, $query, $body) = @_;
|
|
|
|
my $xtime = int (gettimeofday * 1000);
|
|
my $xnonce = create_uuid(UUID_V4);
|
|
my $uid = uuid_to_string($xnonce);
|
|
my $xnonce2 = create_uuid(UUID_V4);
|
|
my $uid2 = uuid_to_string($xnonce);
|
|
|
|
my $message = encode('UTF-8', $self->key);
|
|
$message .= encode('UTF-8', chr(0x00));
|
|
$message .= encode('UTF-8',$xtime);
|
|
$message .= encode('UTF-8',chr(0x00));
|
|
$message .= encode('UTF-8',$uid);
|
|
$message .= encode('UTF-8',chr(0x00));
|
|
$message .= encode('UTF-8',chr(0x00));
|
|
$message .= encode('UTF-8', $self->organisation_id);
|
|
$message .= encode('UTF-8',chr(0x00));
|
|
$message .= encode('UTF-8',chr(0x00));
|
|
$message .= encode('UTF-8',$method);
|
|
$message .= encode('UTF-8',chr(0x00));
|
|
$message .= encode('UTF-8',$path);
|
|
$message .= encode('UTF-8',chr(0x00));
|
|
$message .= encode('UTF-8',$query);
|
|
|
|
if ($body) {
|
|
my $body_json = Dumper($body);
|
|
$message .= encode('UTF-8',chr(0x00));
|
|
$message .= encode('UTF-8', $body_json);
|
|
}
|
|
|
|
my $digest = hmac_sha256_hex($message, $self->secret);
|
|
my $ua = Mojo::UserAgent->new();
|
|
|
|
my $headers = {
|
|
'X-Time' => $xtime,
|
|
'X-Nonce'=> $uid,
|
|
'X-Auth'=> $self->key . ':' . $digest ,
|
|
'Content-Type'=> 'application/json',
|
|
'X-Organization-Id'=> $self->organisation_id,
|
|
'X-Request-Id'=> $uid2
|
|
};
|
|
|
|
if ( $query ) {
|
|
$query = '?'.$query;
|
|
}
|
|
|
|
my $data = $ua->get('https://api2.nicehash.com' . $path.$query => $headers )->res;
|
|
|
|
if ( $path =~ /activity/ ) {
|
|
p $data;
|
|
print $path.$query."\n";
|
|
}
|
|
|
|
# my $data = $ua->get('https://api2.nicehash.com' . $path.$query => $headers )->res->json;
|
|
|
|
return $data->json;
|
|
}
|
|
|
|
1;
|