Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
nucleo
Manage
Activity
Members
Labels
Plan
Issues
4
Issue boards
Milestones
Wiki
Code
Merge requests
1
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Container Registry
Model registry
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
blockchain
nucleo
Commits
051cfd20
Commit
051cfd20
authored
6 years ago
by
Robert Martin-Legene
Browse files
Options
Downloads
Patches
Plain Diff
Fixed walker.pl + introduced libbfa.pm
parent
3b4f06f1
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
bin/libbfa.pm
+108
-0
108 additions, 0 deletions
bin/libbfa.pm
bin/walker.pl
+71
-71
71 additions, 71 deletions
bin/walker.pl
with
179 additions
and
71 deletions
bin/libbfa.pm
0 → 100644
+
108
−
0
View file @
051cfd20
# 20180927 Robert Martin-Legene <robert@nic.ar>
package
libbfa
;
use
Math::
BigInt
;
use
IO::
File
;
use
LWP
;
use
JSON
;
use
Carp
;
$
Carp::
Verbose
=
1
;
sub
_cat
{
my
$filename
=
shift
;
my
$fh
=
IO::
File
->
new
(
$filename
);
return
if
not
defined
$fh
;
local
$_
=
join
(
'',
$fh
->
getlines
);
$fh
->
close
;
return
if
not
defined
$_
;
s|^\s+||
;
s|\s+$||
;
return
if
$_
eq
'';
return
$_
;
}
sub
_filecontents_or_default
{
my
(
$self
,
$filename
,
$default
)
=
@_
;
local
$_
=
$self
->
_cat
(
$filename
);
return
$default
if
not
defined
$_
;
return
$_
;
}
sub
new
{
my
(
$class
)
=
@_
;
my
$self
=
bless
{},
ref
$class
||
$class
;
# BFAHOME
die
'
$BFAHOME not set. Did you source bfa/bin/env ?\n
'
if
not
exists
$ENV
{'
BFAHOME
'};
$self
->
{'
home
'}
=
$ENV
{'
BFAHOME
'};
# BFANETWORKID
$self
->
{'
networkid
'}
=
$ENV
{'
BFANETWORKID
'}
=
exists
$ENV
{'
BFANETWORKID
'}
?
$ENV
{'
BFANETWORKID
'}
:
47525974938
;
# BFANETWORKDIR
$self
->
{'
networkdir
'}
=
$ENV
{'
BFANETWORKDIR
'}
=
exists
$ENV
{'
BFANETWORKDIR
'}
?
$ENV
{'
BFANETWORKDIR
'}
:
$self
->
{'
home
'}
.
'
/network
';
# BFANODEDIR
$self
->
{'
nodedir
'}
=
$ENV
{'
BFANODEDIR
'}
=
exists
$ENV
{'
BFANODEDIR
'}
?
$ENV
{'
BFANODEDIR
'}
:
$self
->
{'
networkdir
'}
.
'
/node
';
# ACCOUNT
if
(
not
exists
$ENV
{'
BFAACCOUNT
'}
)
{
my
$dir
=
$self
->
{'
nodedir
'};
my
@files
=
sort
<
$
{
dir
}
/*--*>
;
# found none?
if
(
scalar
(
@files
)
>
0
)
{
my
$file
=
$files
[
0
];
$file
=~
s/^.*--//
;
$self
->
{'
account
'}
=
$ENV
{'
BFAACCOUNT
'}
=
'
0x
'
.
$file
;
}
}
#
$self
->
{'
netport
'}
=
$self
->
_filecontents_or_default
(
$self
->
{'
nodedir
'}
.
'
/netport
',
30303
);
$self
->
{'
rpcport
'}
=
$self
->
_filecontents_or_default
(
$self
->
{'
nodedir
'}
.
'
/netport
',
8545
);
$self
->
{'
ua
'}
=
LWP::
UserAgent
->
new
;
return
$self
;
}
sub
contract
{
my
$self
=
shift
;
my
$contract
=
{};
my
$contname
=
shift
;
my
$contdir
=
join
('
/
',
[
$self
->
{'
networkdir
'},
'
contracts
',
$contname
]
);
my
$contaddr
=
readlink
$contdir
;
return
if
not
defined
$contaddr
;
$contaddr
=~
s|^.*/||
;
$contract
->
{'
address
'}
=
#contaddr;
my
$abistr
=
$self
->
_cat
(
$contdir
.
'
/abi
'
);
die
"
Can not find abi file, stopped
"
if
not
defined
$abistr
;
eval
{
my
$contract
->
{'
abi
'}
=
decode_json
(
$abistr
)
};
die
"
Can not decode json, stopped
"
if
not
defined
$contract
->
{'
abi
'};
return
$contract
;
}
sub
rpcreq
{
my
(
$self
,
$opname
,
@params
)
=
@_
;
my
$req
=
HTTP::
Request
->
new
(
POST
=>
"
http://127.0.0.1:
"
.
$self
->
{'
rpcport
'}
);
$req
->
content_type
('
application/json
');
my
$extra
=
scalar
@params
?
sprintf
(
qq(,\"params\":[%s])
,
join
('
,
',
@params
))
:
'';
$req
->
content
(
qq({"jsonrpc":"2.0","method":"${opname}"${extra},"id":1})
);
my
$res
=
$self
->
{'
ua
'}
->
request
(
$req
);
die
$res
->
status_line
unless
$res
->
is_success
;
return
$res
->
content
;
}
1
;
This diff is collapsed.
Click to expand it.
bin/walker.pl
+
71
−
71
View file @
051cfd20
...
...
@@ -6,13 +6,16 @@ use IO::File;
use
Math::
BigInt
;
use
Carp
;
$
Carp::
Verbose
=
1
;
die
"
\$
BFAHOME not set. Did you source bfa/bin/env ?
\n
"
unless
exists
$ENV
{
BFAHOME
};
chdir
"
$ENV
{BFAHOME}
"
or
die
$!
;
BEGIN
{
die
"
\$
BFAHOME not set. Did you source bfa/bin/env ?
\n
"
unless
exists
$ENV
{
BFAHOME
};
}
use
libbfa
;
use
Data::
Dumper
;
my
$libbfa
;
package
tools
;
my
$rpcport
;
use
Data::
Dumper
;
my
$ua
=
LWP::
UserAgent
->
new
;
our
$CSI
=
"
\x1b
[
";
our
$clearEOS
=
"
${CSI}
J
";
...
...
@@ -22,8 +25,10 @@ our $normal = "${CSI}m";
sub
new
{
my
$class
=
shift
;
return
bless
{
@
_
},
ref
$class
||
$class
;
my
(
$class
,
$libbfa
)
=
@_
;
my
$self
=
bless
{},
ref
$class
||
$class
;
$self
->
{'
libbfa
'}
=
$libbfa
;
return
$self
;
}
sub
wait
...
...
@@ -68,11 +73,7 @@ sub hex2string($)
sub
rpcreq
{
my
(
$opname
,
@params
)
=
@_
;
if
(
not
defined
$rpcport
)
{
$rpcport
=
tools::
cat
"
$ENV
{BFAHOME}/network5445/node1/rpcport
"
or
die
;
}
my
$req
=
HTTP::
Request
->
new
(
POST
=>
"
http://127.0.0.1:
$rpcport
"
);
my
$req
=
HTTP::
Request
->
new
(
POST
=>
'
http://127.0.0.1:
'
.
$libbfa
->
{'
rpcport
'}
);
$req
->
content_type
('
application/json
');
my
$extra
=
scalar
@params
?
sprintf
(
qq(,\"params\":[%s])
,
join
('
,
',
@params
))
...
...
@@ -86,11 +87,13 @@ sub rpcreq
package
balance
;
use
JSON
;
use
Data::
Dumper
;
sub
new
{
my
(
$class
,
$acct
,
$at
)
=
@_
;
my
(
$class
,
$libbfa
,
$acct
,
$at
)
=
@_
;
my
$self
=
bless
{},
ref
$class
||
$class
;
$self
->
{'
libbfa
'}
=
$libbfa
;
$self
->
get
(
$acct
,
$at
)
if
defined
$acct
;
return
$self
;
}
...
...
@@ -118,10 +121,11 @@ sub at
sub
get
{
my
(
$self
,
$acct
,
$at
)
=
@_
;
my
$libbfa
=
$self
->
{'
libbfa
'};
$self
->
acct
(
$acct
)
if
defined
$acct
;
$self
->
at
(
$at
)
if
defined
$at
;
my
@params
=
(
sprintf
(
qq("%s","%s")
,
$self
->
acct
,
$self
->
at
)
);
my
$content
=
tools::
rpcreq
(
'
eth_getBalance
',
@params
);
my
$content
=
$libbfa
->
rpcreq
(
'
eth_getBalance
',
@params
);
my
$json
;
eval
{
$json
=
decode_json
(
$content
)
};
my
$error
=
error
->
new
(
$content
);
...
...
@@ -139,6 +143,7 @@ sub get
package
error
;
use
JSON
;
use
Data::
Dumper
;
sub
new
{
...
...
@@ -173,15 +178,24 @@ sub message
package
block
;
use
LWP
;
use
JSON
;
use
Data::
Dumper
;
sub
new
{
my
(
$class
,
$json_raw
)
=
@_
;
my
(
$class
,
$libbfa
)
=
@_
;
my
$self
=
bless
{},
ref
$class
||
$class
;
$self
->
{'
libbfa
'}
=
$libbfa
;
return
$self
;
}
sub
parse
{
my
(
$self
,
$json_raw
)
=
@_
;
$self
->
{'
libbfa
'}
=
$libbfa
;
return
unless
defined
$json_raw
;
return
if
$json_raw
eq
'';
my
$self
=
bless
{},
ref
$class
||
$class
;
$self
->
{'
json_raw
'}
=
$json_raw
;
eval
{
$self
->
{'
json
'}
=
decode_json
(
$json_raw
)
};
$self
->
{'
json_raw
'}
=
$json_raw
;
eval
{
$self
->
{'
json
'}
=
decode_json
(
$json_raw
)
};
return
if
$@
;
$self
->
error
(
error
->
new
(
$json_raw
)
);
return
$self
;
...
...
@@ -292,59 +306,38 @@ sub clear
return
$t
;
}
sub
signature
sub
get
{
my
(
$self
)
=
@_
;
my
$t
=
$self
->
extradata
;
return
unless
defined
$t
;
return
substr
(
$t
,
-
130
);
my
$res
=
$self
->
result
;
die
unless
defined
$res
;
use
Data::
Dumper
;
die
Dumper
(
$res
)
.
clear
(
$res
->
{'
parentHash
'})
.
clear
(
$res
->
{'
sha3Uncles
'})
.
clear
(
$res
->
{'
miner
'})
.
clear
(
$res
->
{'
stateRoot
'})
.
clear
(
$res
->
{'
transactionsRoot
'})
.
clear
(
$res
->
{'
receiptsRoot
'})
.
clear
(
$res
->
{'
logsBloom
'})
.
clear
(
$res
->
{'
difficulty
'})
.
clear
(
$res
->
{'
number
'})
.
clear
(
$res
->
{'
gasLimit
'})
.
clear
(
$res
->
{'
gasUsed
'})
.
clear
(
$res
->
{'
timestamp
'})
.
substr
(
clear
(
$res
->
{'
extraData
'}),
0
,
-
130
)
.
('
0
'
x
130
)
.
clear
(
$res
->
{'
mixHash
'})
.
clear
(
$self
->
{'
nonce
'});
}
sub
get
($
;
$
)
{
my
(
$number
)
=
@_
;
$number
=
sprintf
('
0x%x
',
$number
)
if
$number
ne
'
earliest
';
my
$cachefile
=
"
cache/block.
$number
";
my
$block
;
if
(
-
r
$cachefile
)
my
(
$self
,
$number
)
=
@_
;
my
$cachefile
;
if
(
$number
=~
/^[0-9]+$/
)
{
$number
=
sprintf
('
0x%x
',
$number
);
$cachefile
=
"
cache/block.
$number
";
}
my
$libbfa
=
$self
->
{'
libbfa
'};
my
$block
=
block
->
new
(
$libbfa
);
if
(
defined
$cachefile
and
-
r
$cachefile
)
{
$block
=
block
->
new
(
tools::
cat
$cachefile
);
$block
=
$
block
->
parse
(
tools::
cat
$cachefile
);
return
$block
if
defined
$block
and
not
$block
->
error
;
# We delete the cache file if we couldn't use the data in it.
unlink
$cachefile
;
# and then we continue to fetch it
}
my
$content
=
tools::
rpcreq
(
'
eth_getBlockByNumber
',
qq("$number")
,
"
false
");
$block
=
block
->
new
(
$content
);
my
$content
=
tools::
rpcreq
(
'
eth_getBlockByNumber
',
qq("$number")
,
"
false
");
$block
=
$
block
->
parse
(
$content
);
return
if
not
defined
$block
;
return
if
not
exists
$block
->
{'
json
'};
die
$block
->
error
->
message
if
$block
->
error
;
die
$block
->
error
->
message
if
$block
->
error
;
return
if
not
$block
->
result
;
my
$fh
=
IO::
File
->
new
(
$cachefile
,
'
w
'
)
or
die
$!
;
$fh
->
print
(
$block
->
{'
json_raw
'}
);
$fh
->
close
;
if
(
defined
$cachefile
)
{
my
$fh
=
IO::
File
->
new
(
$cachefile
,
'
w
'
)
or
die
$!
;
$fh
->
print
(
$block
->
{'
json_raw
'}
);
$fh
->
close
;
}
return
$block
;
}
...
...
@@ -379,12 +372,12 @@ sub sprint
$txt
.=
sprintf
"
Confirming signer at epoch: 0x%s with an ETH balance of %s
\n
",
$sealer
,
balance
->
new
->
get
(
$sealer
,
$self
->
number
);
balance
->
new
->
get
(
$libbfa
,
$sealer
,
$self
->
number
);
$lines
++
;
}
}
$txt
.=
sprintf
'
%s block:%s gaslimit:%s td:%d Vanity:
%s
',
'
%s block:%s gaslimit:%s td:%d Vanity:%s
',
tools::
gmt
(
$self
->
timestamp
),
$self
->
number
,
$self
->
gasLimit
,
...
...
@@ -401,33 +394,40 @@ sub sprint
}
package
main
;
use
Data::
Dumper
;
$|
=
1
;
chdir
"
$ENV
{BFAHOME}
"
or
die
$!
;
mkdir
'
cache
';
my
$number
=
shift
||
tools::
cat
'
walker.block.last
'
||
'
earli
est
';
my
$number
=
shift
||
'
lat
est
';
my
$tools
=
tools
->
new
;
my
@blks
;
my
$parent
;
$libbfa
=
libbfa
->
new
();
while
(
1
)
{
my
$block
=
block
::
get
(
$number
);
my
$block
=
block
->
new
->
get
(
$number
);
if
(
not
defined
$block
)
{
$tools
->
wait
();
next
;
}
$parent
=
block::
get
(
$block
->
number
-
1
)
if
not
defined
$parent
and
$block
->
number
>
1
;
if
(
defined
$parent
and
$parent
->
hash
ne
$block
->
parentHash
)
#print Dumper(['block'=>$block]);
$number
=
$block
->
number
;
if
(
not
defined
$parent
and
$block
->
number
>
1
)
{
$parent
=
$block
->
get
(
$block
->
number
-
1
);
}
if
(
defined
$parent
and
$parent
->
hash
ne
$block
->
parentHash
)
{
printf
"
\r
${tools
::
red}
%s
${tools
::
normal}
\n
",
scalar
(
$parent
->
sprint
);
(
$parent
,
$block
,
$number
)
=
(
undef
,
$parent
,
$number
-
1
);
$block
->
delete_cache
;
next
;
}
shift
@blks
while
scalar
@blks
>
32
;
push
@blks
,
$block
;
$block
->
print
;
$number
=
$block
->
number
+
1
;
$parent
=
$block
;
$number
=
$block
->
number
+
1
;
$parent
=
$block
;
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment