Crypto-Exchange-Binance-Spot-API
view release on metacpan or search on metacpan
lib/Crypto/Exchange/Binance/Spot/API.pm view on Meta::CPAN
sub response_attr_pair {
my ($self, $pair) = @_;
my $bases = $self->base_currencies;
return $bases->{$pair}
|| die "Pair [$pair] is not a support trading pair";
}
sub response_attr_timestamp {
my ($self, $epoch) = @_;
my $t = DateTime->from_epoch(epoch => $epoch / 1000);
if (my $tz = $self->time_zone) {
$t->set_time_zone($tz);
}
return sub {wantarray ? $t : "$t"};
}
sub response_attr_filled_time {
return response_attr_timestamp(@_);
}
sub response_attr_last_updated {
return response_attr_timestamp(@_);
}
sub set_prices {{
request => {
method => 'get',
path => '/api/v3/ticker/price',
data => {
pair => {
field_name => 'symbol',
required => 1,
},
},
events => {
keys => [ 'pair' ],
},
},
response => {
row => {
pair => 'symbol',
last_price => 'price',
},
},
}}
sub set_balances {{
request => {
method => 'get',
path => '/api/v3/account',
events => {
keys => [ qw( timestamp signature ) ],
},
},
response => {
key => 'balances',
row => {
coin => 'asset',
available => 'free',
in_order => 'locked',
},
row_filter => sub {
my ($self, $row) = @_;
if ($row->{available} == 0 && $row->{in_order} == 0) {
return 'next';
}
},
array2hash => 'coin',
post_row => sub {
my ($self, $row, $rows) = @_;
my $coin = $row->{coin};
return if $coin =~ m/^LD/;
my $earn = delete $rows->{"LD$coin"} || {available => 0};
$rows->{$coin}{staking} = $earn->{available};
},
},
}}
sub set_list_open_orders {
my ($self) = @_;
my $spec = $self->set_list_all_orders;
my $old_filter = $spec->{response}{row_filter} || sub {};
$spec->{response}{row_filter} = sub {
my ($self, $row) = @_;
return $self->$old_filter($row)
|| $row->{status} eq 'FILLED' ? 'next' : '';
};
$spec->{response}{sort} = sub {
my ($self, $a, $b) = @_;
return ($a->{price} || 0) <=> ($b->{price} || 0);
};
return $spec;
}
sub set_list_filled_orders {
my ($self) = @_;
my $spec = $self->set_list_all_orders;
my $old_filter = $spec->{response}{row_filter} || sub {};
$spec->{response}{row}{filled_time} = delete $spec->{response}{row}{last_updated};
$spec->{response}{row_filter} = sub {
my ($self, $row) = @_;
return $self->$old_filter($row)
|| $row->{status} ne 'FILLED' ? 'next' : '';
};
$spec->{response}{sort} = sub {
my ($self, $a, $b) = @_;
return $a->{filled_time}->().'' cmp $b->{filled_time}->().'';
};
return $spec;
( run in 2.034 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )