did some structure stuff

took a lot of generics
note: rewrite blocktransferevent