Some Object Oriented perl classes for interacting with a Nano (rai) node
These classes do not need to be installed; you can just use them like this:
use Crypto::NanoRPC;
The module uses these other modules, which you need to install by CPAN or your favourite package manager
- HTTP::Request;
- LWP::UserAgent;
- JSON;
After meeting these dependencies you can
use Data::Dumper;
my $rpc = Crypto::NanoRPC->new();
my $count = $rpc->block_count();
my $newkey = $rpc->key_create();
print Dumper($count);
print Dumper($newkey);
Result:
$VAR1 = {
'count' => '14452072',
'unchecked' => '629'
};
$VAR1 = {
'public' => '51C9F72ED415331B6F5DDC6E4620EEFB8E87C7EC4011EC697B98D59D57C7C022',
'account' => 'xrb_1ngbywqfa7bm5fqouq5garigxywgiz5yri1jxjnqq88omodwhi34c9wxgtwf',
'private' => '5DA0774339494A1FEDC371C4680ACA47036CED78B9757FF6B69B6E5F56443348'
};
Most rpc calls require arguments, see for example https://docs.nano.org/commands/rpc-protocol/#account\_create. Implemented RPC calls are defined in the array rpc_calls in NanoRPC.pm. The required arguments can be set using the set_params() method. The most common arguments, "wallet" and "account", have their own set_ methods.
ny $url = 'http://[::1]:7076';
my $wallet_id = '0000000000000000000000000000000000000000000000000000000000000000'; ## replace with real wallet id
my $account = 'xrb_111111111111111111111111111111111111111111111111111111111111'; ## replace with real account number
my $rpc = NanoRPC->new($url);
my $amount = $rpc->mrai_to_raw(amount => 2)->{amount}; ## 2 Nano, converted to raw
$rpc->set_wallet($wallet_id);
$rpc->set_params(
destination => 'xrb_333333333333333333333333333333333333333333333333333333333333'
amount => $amount,
);
my $result = $rpc->send();
if (defined $result->{error}) {
print "Send $amount raw failed\nError message:" . $result->{error};
} else {
print "Send $amount succes!\n";
}
All rpc calls return hashes of key => value pairs. When an error occurs, a hash with 'error' as a single key 'error' will be returned and the value will be a description of the error.