github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/signer/core/stdioui.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 //</624450110486482944> 11 12 // 13 14 package core 15 16 import ( 17 "context" 18 "sync" 19 20 "github.com/ethereum/go-ethereum/internal/ethapi" 21 "github.com/ethereum/go-ethereum/log" 22 "github.com/ethereum/go-ethereum/rpc" 23 ) 24 25 type StdIOUI struct { 26 client rpc.Client 27 mu sync.Mutex 28 } 29 30 func NewStdIOUI() *StdIOUI { 31 log.Info("NewStdIOUI") 32 client, err := rpc.DialContext(context.Background(), "stdio://“” 33 if err != nil { 34 log.Crit("Could not create stdio client", "err", err) 35 } 36 return &StdIOUI{client: *client} 37 } 38 39 //调度通过stdio发送请求 40 func (ui *StdIOUI) dispatch(serviceMethod string, args interface{}, reply interface{}) error { 41 err := ui.client.Call(&reply, serviceMethod, args) 42 if err != nil { 43 log.Info("Error", "exc", err.Error()) 44 } 45 return err 46 } 47 48 func (ui *StdIOUI) ApproveTx(request *SignTxRequest) (SignTxResponse, error) { 49 var result SignTxResponse 50 err := ui.dispatch("ApproveTx", request, &result) 51 return result, err 52 } 53 54 func (ui *StdIOUI) ApproveSignData(request *SignDataRequest) (SignDataResponse, error) { 55 var result SignDataResponse 56 err := ui.dispatch("ApproveSignData", request, &result) 57 return result, err 58 } 59 60 func (ui *StdIOUI) ApproveExport(request *ExportRequest) (ExportResponse, error) { 61 var result ExportResponse 62 err := ui.dispatch("ApproveExport", request, &result) 63 return result, err 64 } 65 66 func (ui *StdIOUI) ApproveImport(request *ImportRequest) (ImportResponse, error) { 67 var result ImportResponse 68 err := ui.dispatch("ApproveImport", request, &result) 69 return result, err 70 } 71 72 func (ui *StdIOUI) ApproveListing(request *ListRequest) (ListResponse, error) { 73 var result ListResponse 74 err := ui.dispatch("ApproveListing", request, &result) 75 return result, err 76 } 77 78 func (ui *StdIOUI) ApproveNewAccount(request *NewAccountRequest) (NewAccountResponse, error) { 79 var result NewAccountResponse 80 err := ui.dispatch("ApproveNewAccount", request, &result) 81 return result, err 82 } 83 84 func (ui *StdIOUI) ShowError(message string) { 85 err := ui.dispatch("ShowError", &Message{message}, nil) 86 if err != nil { 87 log.Info("Error calling 'ShowError'", "exc", err.Error(), "msg", message) 88 } 89 } 90 91 func (ui *StdIOUI) ShowInfo(message string) { 92 err := ui.dispatch("ShowInfo", Message{message}, nil) 93 if err != nil { 94 log.Info("Error calling 'ShowInfo'", "exc", err.Error(), "msg", message) 95 } 96 } 97 func (ui *StdIOUI) OnApprovedTx(tx ethapi.SignTransactionResult) { 98 err := ui.dispatch("OnApprovedTx", tx, nil) 99 if err != nil { 100 log.Info("Error calling 'OnApprovedTx'", "exc", err.Error(), "tx", tx) 101 } 102 } 103 104 func (ui *StdIOUI) OnSignerStartup(info StartupInfo) { 105 err := ui.dispatch("OnSignerStartup", info, nil) 106 if err != nil { 107 log.Info("Error calling 'OnSignerStartup'", "exc", err.Error(), "info", info) 108 } 109 } 110 func (ui *StdIOUI) OnInputRequired(info UserInputRequest) (UserInputResponse, error) { 111 var result UserInputResponse 112 err := ui.dispatch("OnInputRequired", info, &result) 113 if err != nil { 114 log.Info("Error calling 'OnInputRequired'", "exc", err.Error(), "info", info) 115 } 116 return result, err 117 } 118