forked from cerc-io/laconicd-deprecated
fix transaction receipts (#274)
* return ethtypes.Receipt in GetTransactionReceipt * add PostState to receipts, test working * add contract addr assert to tests * update tests * cleanup, working with web3 * remove print * update tests
This commit is contained in:
parent
d3c802f99e
commit
86cd39defb
@ -707,12 +707,13 @@ func (e *PublicEthAPI) GetTransactionReceipt(hash common.Hash) (map[string]inter
|
|||||||
e.cliCtx.Codec.MustUnmarshalJSON(res, &logs)
|
e.cliCtx.Codec.MustUnmarshalJSON(res, &logs)
|
||||||
|
|
||||||
txData := tx.TxResult.GetData()
|
txData := tx.TxResult.GetData()
|
||||||
|
|
||||||
data, err := types.DecodeResultData(txData)
|
data, err := types.DecodeResultData(txData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
status = 0 // transaction failed
|
||||||
}
|
}
|
||||||
|
|
||||||
fields := map[string]interface{}{
|
receipt := map[string]interface{}{
|
||||||
"blockHash": blockHash,
|
"blockHash": blockHash,
|
||||||
"blockNumber": hexutil.Uint64(tx.Height),
|
"blockNumber": hexutil.Uint64(tx.Height),
|
||||||
"transactionHash": hash,
|
"transactionHash": hash,
|
||||||
@ -728,10 +729,10 @@ func (e *PublicEthAPI) GetTransactionReceipt(hash common.Hash) (map[string]inter
|
|||||||
}
|
}
|
||||||
|
|
||||||
if data.Address != (common.Address{}) {
|
if data.Address != (common.Address{}) {
|
||||||
fields["contractAddress"] = data.Address
|
receipt["contractAddress"] = data.Address
|
||||||
}
|
}
|
||||||
|
|
||||||
return fields, nil
|
return receipt, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// PendingTransactions returns the transactions that are in the transaction pool
|
// PendingTransactions returns the transactions that are in the transaction pool
|
||||||
|
@ -21,6 +21,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/cosmos/ethermint/version"
|
"github.com/cosmos/ethermint/version"
|
||||||
|
ethcmn "github.com/ethereum/go-ethereum/common"
|
||||||
"github.com/ethereum/go-ethereum/common/hexutil"
|
"github.com/ethereum/go-ethereum/common/hexutil"
|
||||||
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
ethtypes "github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
@ -261,6 +262,36 @@ func TestEth_GetFilterChanges_WrongID(t *testing.T) {
|
|||||||
require.NotNil(t, err)
|
require.NotNil(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sendTestTransaction sends a dummy transaction
|
||||||
|
func sendTestTransaction(t *testing.T) hexutil.Bytes {
|
||||||
|
from := getAddress(t)
|
||||||
|
param := make([]map[string]string, 1)
|
||||||
|
param[0] = make(map[string]string)
|
||||||
|
param[0]["from"] = "0x" + fmt.Sprintf("%x", from)
|
||||||
|
param[0]["to"] = "0x1122334455667788990011223344556677889900"
|
||||||
|
rpcRes, err := call(t, "eth_sendTransaction", param)
|
||||||
|
require.NoError(t, err)
|
||||||
|
var hash hexutil.Bytes
|
||||||
|
err = json.Unmarshal(rpcRes.Result, &hash)
|
||||||
|
require.NoError(t, err)
|
||||||
|
return hash
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEth_GetTransactionReceipt(t *testing.T) {
|
||||||
|
hash := sendTestTransaction(t)
|
||||||
|
|
||||||
|
time.Sleep(time.Second * 5)
|
||||||
|
|
||||||
|
param := []string{hash.String()}
|
||||||
|
rpcRes, err := call(t, "eth_getTransactionReceipt", param)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
receipt := make(map[string]interface{})
|
||||||
|
err = json.Unmarshal(rpcRes.Result, &receipt)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, "0x1", receipt["status"].(string))
|
||||||
|
}
|
||||||
|
|
||||||
// deployTestContract deploys a contract that emits an event in the constructor
|
// deployTestContract deploys a contract that emits an event in the constructor
|
||||||
func deployTestContract(t *testing.T) hexutil.Bytes {
|
func deployTestContract(t *testing.T) hexutil.Bytes {
|
||||||
from := getAddress(t)
|
from := getAddress(t)
|
||||||
@ -268,7 +299,8 @@ func deployTestContract(t *testing.T) hexutil.Bytes {
|
|||||||
param := make([]map[string]string, 1)
|
param := make([]map[string]string, 1)
|
||||||
param[0] = make(map[string]string)
|
param[0] = make(map[string]string)
|
||||||
param[0]["from"] = "0x" + fmt.Sprintf("%x", from)
|
param[0]["from"] = "0x" + fmt.Sprintf("%x", from)
|
||||||
param[0]["data"] = "0x6080604052348015600f57600080fd5b5060117f775a94827b8fd9b519d36cd827093c664f93347070a554f65e4a6f56cd73889860405160405180910390a2603580604b6000396000f3fe6080604052600080fdfea165627a7a723058206cab665f0f557620554bb45adf266708d2bd349b8a4314bdff205ee8440e3c240029"
|
param[0]["data"] = "0x60806040526000805534801561001457600080fd5b5060d2806100236000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c80634f2be91f1460415780636deebae31460495780638ada066e146051575b600080fd5b6047606d565b005b604f6080565b005b60576094565b6040518082815260200191505060405180910390f35b6000808154809291906001019190505550565b600080815480929190600190039190505550565b6000805490509056fea265627a7a723158207b1aaa18c3100d8aa67f26a53f3cb83d2c69342d17327bd11e1b17c248957bfa64736f6c634300050c0032"
|
||||||
|
param[0]["gas"] = "0x200000"
|
||||||
|
|
||||||
rpcRes, err := call(t, "eth_sendTransaction", param)
|
rpcRes, err := call(t, "eth_sendTransaction", param)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@ -280,17 +312,22 @@ func deployTestContract(t *testing.T) hexutil.Bytes {
|
|||||||
return hash
|
return hash
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEth_GetTransactionReceipt(t *testing.T) {
|
func TestEth_GetTransactionReceipt_ContractDeployment(t *testing.T) {
|
||||||
hash := deployTestContract(t)
|
hash := deployTestContract(t)
|
||||||
|
|
||||||
time.Sleep(time.Second * 2)
|
time.Sleep(time.Second * 5)
|
||||||
|
|
||||||
param := []string{hash.String()}
|
param := []string{hash.String()}
|
||||||
rpcRes, err := call(t, "eth_getTransactionReceipt", param)
|
rpcRes, err := call(t, "eth_getTransactionReceipt", param)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
t.Log(rpcRes.Result)
|
receipt := make(map[string]interface{})
|
||||||
// TODO: why does this not return a receipt?
|
err = json.Unmarshal(rpcRes.Result, &receipt)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, "0x1", receipt["status"].(string))
|
||||||
|
|
||||||
|
require.NotEqual(t, ethcmn.Address{}.String(), receipt["contractAddress"].(string))
|
||||||
|
// TODO: assert logs exist
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEth_GetTxLogs(t *testing.T) {
|
func TestEth_GetTxLogs(t *testing.T) {
|
||||||
|
Loading…
Reference in New Issue
Block a user