forked from cerc-io/laconicd-deprecated
Tx receipt query fix (#126)
* Fixed tx receipt error on failed transaction * Add returnData to failed transaction for logs bloom * Change comment to TODO
This commit is contained in:
parent
160e82b2ad
commit
475919274e
@ -605,8 +605,14 @@ func (e *PublicEthAPI) GetTransactionReceipt(hash common.Hash) (map[string]inter
|
|||||||
var logs types.QueryETHLogs
|
var logs types.QueryETHLogs
|
||||||
e.cliCtx.Codec.MustUnmarshalJSON(res, &logs)
|
e.cliCtx.Codec.MustUnmarshalJSON(res, &logs)
|
||||||
|
|
||||||
// TODO: change hard coded indexing of bytes
|
txData := tx.TxResult.GetData()
|
||||||
bloomFilter := ethtypes.BytesToBloom(tx.TxResult.GetData()[20:])
|
var bloomFilter ethtypes.Bloom
|
||||||
|
var contractAddress common.Address
|
||||||
|
if len(txData) >= 20 {
|
||||||
|
// TODO: change hard coded indexing of bytes
|
||||||
|
bloomFilter = ethtypes.BytesToBloom(txData[20:])
|
||||||
|
contractAddress = common.BytesToAddress(txData[:20])
|
||||||
|
}
|
||||||
|
|
||||||
fields := map[string]interface{}{
|
fields := map[string]interface{}{
|
||||||
"blockHash": blockHash,
|
"blockHash": blockHash,
|
||||||
@ -623,7 +629,6 @@ func (e *PublicEthAPI) GetTransactionReceipt(hash common.Hash) (map[string]inter
|
|||||||
"status": status,
|
"status": status,
|
||||||
}
|
}
|
||||||
|
|
||||||
contractAddress := common.BytesToAddress(tx.TxResult.GetData()[:20])
|
|
||||||
if contractAddress != (common.Address{}) {
|
if contractAddress != (common.Address{}) {
|
||||||
// TODO: change hard coded indexing of first 20 bytes
|
// TODO: change hard coded indexing of first 20 bytes
|
||||||
fields["contractAddress"] = contractAddress
|
fields["contractAddress"] = contractAddress
|
||||||
|
@ -74,19 +74,6 @@ func (st StateTransition) TransitionCSDB(ctx sdk.Context) (sdk.Result, *big.Int)
|
|||||||
_, leftOverGas, vmerr = vmenv.Call(senderRef, *st.Recipient, st.Payload, gasLimit, st.Amount)
|
_, leftOverGas, vmerr = vmenv.Call(senderRef, *st.Recipient, st.Payload, gasLimit, st.Amount)
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle errors
|
|
||||||
if vmerr != nil {
|
|
||||||
return emint.ErrVMExecution(vmerr.Error()).Result(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Refunds would happen here, if intended in future
|
|
||||||
|
|
||||||
st.Csdb.Finalise(true) // Change to depend on config
|
|
||||||
|
|
||||||
// Consume gas from evm execution
|
|
||||||
// Out of gas check does not need to be done here since it is done within the EVM execution
|
|
||||||
ctx.GasMeter().ConsumeGas(gasLimit-leftOverGas, "EVM execution consumption")
|
|
||||||
|
|
||||||
// Generate bloom filter to be saved in tx receipt data
|
// Generate bloom filter to be saved in tx receipt data
|
||||||
bloomInt := big.NewInt(0)
|
bloomInt := big.NewInt(0)
|
||||||
var bloomFilter ethtypes.Bloom
|
var bloomFilter ethtypes.Bloom
|
||||||
@ -99,6 +86,21 @@ func (st StateTransition) TransitionCSDB(ctx sdk.Context) (sdk.Result, *big.Int)
|
|||||||
// TODO: coniditionally add either/ both of these to return data
|
// TODO: coniditionally add either/ both of these to return data
|
||||||
returnData := append(addr.Bytes(), bloomFilter.Bytes()...)
|
returnData := append(addr.Bytes(), bloomFilter.Bytes()...)
|
||||||
|
|
||||||
|
// handle errors
|
||||||
|
if vmerr != nil {
|
||||||
|
res := emint.ErrVMExecution(vmerr.Error()).Result()
|
||||||
|
res.Data = returnData
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Refund unused gas here, if intended in future
|
||||||
|
|
||||||
|
st.Csdb.Finalise(true) // Change to depend on config
|
||||||
|
|
||||||
|
// Consume gas from evm execution
|
||||||
|
// Out of gas check does not need to be done here since it is done within the EVM execution
|
||||||
|
ctx.GasMeter().ConsumeGas(gasLimit-leftOverGas, "EVM execution consumption")
|
||||||
|
|
||||||
return sdk.Result{Data: returnData, GasUsed: st.GasLimit - leftOverGas}, bloomInt
|
return sdk.Result{Data: returnData, GasUsed: st.GasLimit - leftOverGas}, bloomInt
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user