@@ -2,6 +2,8 @@ package evm
22
33import (
44 "encoding/hex"
5+ "github.com/hyperledger/burrow/acm/balance"
6+ "math/big"
57 "strconv"
68
79 //"github.com/hyperledger/burrow/acm/balance"
@@ -128,23 +130,53 @@ func (p *proxy) sendRawTransaction(ctx contract.KContext) (*contract.Response, e
128130 ); err != nil {
129131 return nil , err
130132 }
133+ //from,err:=crypto.AddressFromBytes(rawt)
134+ to , err := crypto .AddressFromBytes (rawTx .To )
135+ if err != nil {
136+ return nil , err
137+ }
131138
132- to , err := crypto . AddressFromHexString ( string ( rawTx .To ) )
139+ enc , err := txs . RLPEncode ( rawTx .Nonce , rawTx . GasPrice , rawTx . GasLimit , rawTx . To , rawTx . Value , rawTx . Data )
133140 if err != nil {
134141 return nil , err
135142 }
136- contractName , err := DetermineContractNameFromEVM (to )
143+
144+ sig := crypto .CompressedSignatureFromParams (rawTx .V - net - 8 - 1 , rawTx .R , rawTx .S )
145+ pub , err := crypto .PublicKeyFromSignature (sig , crypto .Keccak256 (enc ))
137146 if err != nil {
138147 return nil , err
139148 }
140149
141- args1 := map [string ][]byte {
142- "input" : rawTx .Data ,
143- "jsonEncoded" : []byte ("false" ),
150+ if len (rawTx .Data ) == 0 {
151+ from := pub .GetAddress ()
152+ xfrom , err := EVMAddressToXchain (from )
153+ if err != nil {
154+ return nil , err
155+ }
156+ //to,err:=crypto
157+ xto , err := EVMAddressToXchain (to )
158+ if err != nil {
159+ return nil , err
160+ }
161+ amount := balance .WeiToNative (rawTx .Value )
162+ if err := ctx .Transfer (xfrom , xto , amount ); err != nil {
163+ return nil , err
164+ }
165+
166+ } else {
167+ contractName , err := DetermineContractNameFromEVM (to )
168+ if err != nil {
169+ return nil , err
170+ }
171+
172+ args1 := map [string ][]byte {
173+ "input" : rawTx .Data ,
174+ "jsonEncoded" : []byte ("false" ),
175+ }
176+ resp , err := ctx .Call ("evm" , contractName , "" , args1 )
177+ return resp , err
144178 }
145- //TODO 如果value 非空,那么需要有 transfer
146- resp , err := ctx .Call ("evm" , contractName , "" , args1 )
147- return resp , err
179+
148180}
149181
150182func (p * proxy ) ContractCall (ctx contract.KContext ) (* contract.Response , error ) {
0 commit comments