@@ -2,16 +2,16 @@ package contexts
22
33import (
44 "fmt"
5+ "math/big"
6+
7+ "github.com/hyperledger/burrow/execution/vms"
58
69 "github.com/hyperledger/burrow/acm"
710 "github.com/hyperledger/burrow/acm/acmstate"
811 "github.com/hyperledger/burrow/crypto"
912 "github.com/hyperledger/burrow/execution/engine"
1013 "github.com/hyperledger/burrow/execution/errors"
11- "github.com/hyperledger/burrow/execution/evm"
1214 "github.com/hyperledger/burrow/execution/exec"
13- "github.com/hyperledger/burrow/execution/native"
14- "github.com/hyperledger/burrow/execution/wasm"
1515 "github.com/hyperledger/burrow/logging"
1616 "github.com/hyperledger/burrow/logging/structure"
1717 "github.com/hyperledger/burrow/txs/payload"
@@ -21,7 +21,7 @@ import (
2121const GasLimit = uint64 (1000000 )
2222
2323type CallContext struct {
24- EVM * evm. EVM
24+ VMS * vms. VirtualMachines
2525 State acmstate.ReaderWriter
2626 MetadataState acmstate.MetadataReaderWriter
2727 Blockchain engine.Blockchain
@@ -135,7 +135,7 @@ func (ctx *CallContext) Deliver(inAcc, outAcc *acm.Account, value uint64) error
135135 callee = crypto .NewContractAddress (caller , ctx .txe .TxHash )
136136 code = ctx .tx .Data
137137 wcode = ctx .tx .WASM
138- err := native .CreateAccount (txCache , callee )
138+ err := engine .CreateAccount (txCache , callee )
139139 if err != nil {
140140 return err
141141 }
@@ -144,7 +144,7 @@ func (ctx *CallContext) Deliver(inAcc, outAcc *acm.Account, value uint64) error
144144 "init_code" , code )
145145
146146 // store abis
147- err = native .UpdateContractMeta (txCache , metaCache , callee , ctx .tx .ContractMeta )
147+ err = engine .UpdateContractMeta (txCache , metaCache , callee , ctx .tx .ContractMeta )
148148 if err != nil {
149149 return err
150150 }
@@ -184,19 +184,20 @@ func (ctx *CallContext) Deliver(inAcc, outAcc *acm.Account, value uint64) error
184184 var ret []byte
185185 var err error
186186 txHash := ctx .txe .Envelope .Tx .Hash ()
187- gas := ctx .tx .GasLimit
187+ gas := new (big. Int ). SetUint64 ( ctx .tx .GasLimit )
188188
189189 params := engine.CallParams {
190190 Origin : caller ,
191191 Caller : caller ,
192192 Callee : callee ,
193193 Input : ctx .tx .Data ,
194- Value : value ,
195- Gas : & gas ,
194+ Value : * new (big. Int ). SetUint64 ( value ) ,
195+ Gas : gas ,
196196 }
197197
198198 if len (wcode ) != 0 {
199- ret , err = wasm .RunWASM (txCache , params , wcode )
199+ // TODO: accept options
200+ ret , err = ctx .VMS .WVM .Execute (txCache , ctx .Blockchain , ctx .txe , params , wcode )
200201 if err != nil {
201202 // Failure. Charge the gas fee. The 'value' was otherwise not transferred.
202203 ctx .Logger .InfoMsg ("Error on WASM execution" ,
@@ -206,7 +207,7 @@ func (ctx *CallContext) Deliver(inAcc, outAcc *acm.Account, value uint64) error
206207 } else {
207208 ctx .Logger .TraceMsg ("Successful execution" )
208209 if createContract {
209- err := native .InitWASMCode (txCache , callee , ret )
210+ err := engine .InitWASMCode (txCache , callee , ret )
210211 if err != nil {
211212 return err
212213 }
@@ -218,10 +219,10 @@ func (ctx *CallContext) Deliver(inAcc, outAcc *acm.Account, value uint64) error
218219 }
219220 } else {
220221 // EVM
221- ctx .EVM .SetNonce (txHash )
222- ctx .EVM .SetLogger (ctx .Logger .With (structure .TxHashKey , txHash ))
222+ ctx .VMS . EVM .SetNonce (txHash )
223+ ctx .VMS . EVM .SetLogger (ctx .Logger .With (structure .TxHashKey , txHash ))
223224
224- ret , err = ctx .EVM .Execute (txCache , ctx .Blockchain , ctx .txe , params , code )
225+ ret , err = ctx .VMS . EVM .Execute (txCache , ctx .Blockchain , ctx .txe , params , code )
225226
226227 if err != nil {
227228 // Failure. Charge the gas fee. The 'value' was otherwise not transferred.
@@ -233,7 +234,7 @@ func (ctx *CallContext) Deliver(inAcc, outAcc *acm.Account, value uint64) error
233234 } else {
234235 ctx .Logger .TraceMsg ("Successful execution" )
235236 if createContract {
236- err := native .InitEVMCode (txCache , callee , ret )
237+ err := engine .InitEVMCode (txCache , callee , ret )
237238 if err != nil {
238239 return err
239240 }
@@ -245,7 +246,8 @@ func (ctx *CallContext) Deliver(inAcc, outAcc *acm.Account, value uint64) error
245246 }
246247 ctx .CallEvents (err )
247248 }
248- ctx .txe .Return (ret , ctx .tx .GasLimit - gas )
249+ // Gas starts life as a uint64 and should only been reduced (used up) over a transaction so .Uint64() is safe
250+ ctx .txe .Return (ret , ctx .tx .GasLimit - gas .Uint64 ())
249251 // Create a receipt from the ret and whether it erred.
250252 ctx .Logger .TraceMsg ("VM Call complete" ,
251253 "caller" , caller ,
0 commit comments