diff --git a/sys/src/cmd/btc/dat.h b/sys/src/cmd/btc/dat.h index 4cdc1d259..cb5673d35 100644 --- a/sys/src/cmd/btc/dat.h +++ b/sys/src/cmd/btc/dat.h @@ -4,6 +4,7 @@ typedef struct DirEntry DirEntry; enum { TROOT, + TBLOCKS, TADDR, TADDRSUB, TADDRTX, diff --git a/sys/src/cmd/btc/fs.c b/sys/src/cmd/btc/fs.c index 31a69d9d0..c4509f1aa 100644 --- a/sys/src/cmd/btc/fs.c +++ b/sys/src/cmd/btc/fs.c @@ -10,13 +10,20 @@ Reqqueue *queue; static char *addrwalk(Fid *, char *, Qid *); char *balancestr(DirEntry *, Aux *); char *txstr(DirEntry *, Aux *); +char *blocksstr(DirEntry *, Aux *); DirEntry entr[] = { [TROOT] = { .name = "", .qid = {TROOT, 0, QTDIR}, .par = TROOT, - .sub = {TADDR}, + .sub = {TADDR, TBLOCKS}, + }, + [TBLOCKS] = { + .name = "blocks", + .qid = {TBLOCKS, 0, 0}, + .par = TROOT, + .str = blocksstr, }, [TADDR] = { .name = "addr", diff --git a/sys/src/cmd/btc/httpfs.c b/sys/src/cmd/btc/httpfs.c index 0222762e5..c29a39e31 100644 --- a/sys/src/cmd/btc/httpfs.c +++ b/sys/src/cmd/btc/httpfs.c @@ -74,14 +74,16 @@ parsetx(String *str, JSON *j, JSON *l) char * balancestr(DirEntry *, Aux *a) { - char *s; char buf[512]; sprint(buf, "http://blockchain.info/q/addressbalance/%s", a->addr); - s = graburl(buf); - if(s == nil) - return nil; - return s; + return graburl(buf); +} + +char * +blocksstr(DirEntry *, Aux *) +{ + return graburl("http://blockchain.info/q/getblockcount"); } char * diff --git a/sys/src/cmd/btc/status b/sys/src/cmd/btc/status new file mode 100755 index 000000000..e98e35ea9 --- /dev/null +++ b/sys/src/cmd/btc/status @@ -0,0 +1,31 @@ +#!/bin/rc +wallet=$home/lib/wallet +btc=/mnt/btc +addr=`{awk ' { print $1 } ' < $wallet} +last=`{cat $btc/blocks} +cat $btc/addr/$addr/tx | sort +0n | uniq | tail -n 10 | awk ' + BEGIN { + split("'^$"addr^'", addrs) + for(x in addrs) + my[addrs[x]] = 1 + last='^$last^' + } + { + f = -1 + bal = 0 + for(i = 4; i <= NF; i++){ + if($i == "|") + f = 1 + else if(my[$i]){ + i++ + bal += f*$i + }else + i++ + } + d = last - $3 + printf "%s %+15.4f %c %s\n", $1, bal/1e8, (d > 9) ? 32 : (d + 48), $2 + } +' +echo '================================================================================================' +cat $btc/addr/$addr/balance | awk ' { a += $1 } END { printf "balance %18.4f BTC\n", a/1e8 } ' +