github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/signer/core/auditlog.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:42</date> 10 //</624450110390013952> 11 12 13 package core 14 15 import ( 16 "context" 17 18 "encoding/json" 19 20 "github.com/ethereum/go-ethereum/accounts" 21 "github.com/ethereum/go-ethereum/common" 22 "github.com/ethereum/go-ethereum/common/hexutil" 23 "github.com/ethereum/go-ethereum/internal/ethapi" 24 "github.com/ethereum/go-ethereum/log" 25 ) 26 27 type AuditLogger struct { 28 log log.Logger 29 api ExternalAPI 30 } 31 32 func (l *AuditLogger) List(ctx context.Context) ([]common.Address, error) { 33 l.log.Info("List", "type", "request", "metadata", MetadataFromContext(ctx).String()) 34 res, e := l.api.List(ctx) 35 l.log.Info("List", "type", "response", "data", res) 36 37 return res, e 38 } 39 40 func (l *AuditLogger) New(ctx context.Context) (accounts.Account, error) { 41 return l.api.New(ctx) 42 } 43 44 func (l *AuditLogger) SignTransaction(ctx context.Context, args SendTxArgs, methodSelector *string) (*ethapi.SignTransactionResult, error) { 45 sel := "<nil>" 46 if methodSelector != nil { 47 sel = *methodSelector 48 } 49 l.log.Info("SignTransaction", "type", "request", "metadata", MetadataFromContext(ctx).String(), 50 "tx", args.String(), 51 "methodSelector", sel) 52 53 res, e := l.api.SignTransaction(ctx, args, methodSelector) 54 if res != nil { 55 l.log.Info("SignTransaction", "type", "response", "data", common.Bytes2Hex(res.Raw), "error", e) 56 } else { 57 l.log.Info("SignTransaction", "type", "response", "data", res, "error", e) 58 } 59 return res, e 60 } 61 62 func (l *AuditLogger) Sign(ctx context.Context, addr common.MixedcaseAddress, data hexutil.Bytes) (hexutil.Bytes, error) { 63 l.log.Info("Sign", "type", "request", "metadata", MetadataFromContext(ctx).String(), 64 "addr", addr.String(), "data", common.Bytes2Hex(data)) 65 b, e := l.api.Sign(ctx, addr, data) 66 l.log.Info("Sign", "type", "response", "data", common.Bytes2Hex(b), "error", e) 67 return b, e 68 } 69 70 func (l *AuditLogger) Export(ctx context.Context, addr common.Address) (json.RawMessage, error) { 71 l.log.Info("Export", "type", "request", "metadata", MetadataFromContext(ctx).String(), 72 "addr", addr.Hex()) 73 j, e := l.api.Export(ctx, addr) 74 //在这种情况下,我们实际上不记录JSON响应,这可能是非常敏感的。 75 l.log.Info("Export", "type", "response", "json response size", len(j), "error", e) 76 return j, e 77 } 78 79 //func(l*auditlogger)导入(ctx context.context,keyjson json.rawmessage)(account,error) 80 ////不要记录JSON内容 81 //l.log.info(“导入”,“类型”,“请求”,“元数据”,metadataFromContext(ctx.string(), 82 //“keyjson大小”,len(keyjson)) 83 //a,e:=l.api.import(ctx,keyjson) 84 //l.log.info(“导入”,“类型”,“响应”,“地址”,a.string(),“错误”,e) 85 //返回A,E 86 //} 87 88 func NewAuditLogger(path string, api ExternalAPI) (*AuditLogger, error) { 89 l := log.New("api", "signer") 90 handler, err := log.FileHandler(path, log.LogfmtFormat()) 91 if err != nil { 92 return nil, err 93 } 94 l.SetHandler(handler) 95 l.Info("Configured", "audit log", path) 96 return &AuditLogger{l, api}, nil 97 } 98