8ec7edf5bd
* evm: move Keeper and Querier to /keeper package * keeper: update keeper_test.go * fix format * evm: use aliased types * bump SDK version to v0.38.1 * app: updates from new version * errors: switch sdk.Error -> error * errors: switch sdk.Error -> error. Continuation * more fixes * update app/ * update keys and client pkgs * build * fix tests * lint * minor changes * changelog * address @austinbell comments * Fix keyring usage in rpc API and CLI * fix keyring * break line * Misc cleanup (#188) * evm: move Begin and EndBlock to abci.go * evm: use expected keeper interfaces * app: use EthermintApp for integration and unit test setup * evm: remove count type; update codec * go mod verify * evm: rename msgs for consistency * evm: events * minor cleanup * lint * ante: update tests * changelog * nolint * evm: update statedb to create ethermint Account instead of BaseAccount * fix importer test * address @austinabell comments * update README * changelog * evm: update codec * rename GasLimit->Gas and Price ->GasPrice * msg cleanup and tests * cleanup TxData * fix marshaling * revert rename * move types * evm/keeper: querier tests * switch MarshalLengthPrefixed -> BinaryBare; remove panics * fix event sender * fix panic * try fix txDecoder error * evm: handler tests * evm: handler MsgEthermint test * fix tests * store logs in keeper after transition (#210) * add some comments * begin log handler test * update TransitionCSDB to return ReturnData * use rlp for result data encode/decode * update tests * implement SetBlockLogs * implement GetBlockLogs * test log set/get * update keeper get/set logs to use hash as key * fix test * move logsKey to csdb * attempt to fix test * attempt to fix test * attempt to fix test * lint * lint * lint * save logs after handling msg * update k.Logs * cleanup * remove unused * fix issues * comment out handler test * address comments * lint * fix handler test * address comments * use amino * lint * address comments * merge * fix encoding bug * minor fix * rpc: error handling * rpc: simulate only returns gasConsumed * rpc: error ineffassign * evm: handler test * go: bump version to 1.14 and SDK version to latest master * rpc: fix simulation return value * breaking changes from SDK * sdk: breaking changes; build * tests: fixes * minor fix * proto: ethermint types attempt * proto: define EthAccount proto type and extend sdk std.Codec * evm: fix panic on handler test * evm: minor state object changes * cleanup * tests: update test-importer * fix evm test * fix pubkey registration * lint * cleanup * more test checks for importer * minor change * codec fixes * rm init func * fix importer test build * fixes * test fixes * fix bloom key * rm unnecesary func * remove comment Co-authored-by: austinabell <austinabell8@gmail.com> Co-authored-by: noot <36753753+noot@users.noreply.github.com>
167 lines
3.4 KiB
Go
167 lines
3.4 KiB
Go
package types
|
|
|
|
import (
|
|
"math/big"
|
|
|
|
"github.com/cosmos/ethermint/utils"
|
|
|
|
ethcmn "github.com/ethereum/go-ethereum/common"
|
|
)
|
|
|
|
// TxData implements the Ethereum transaction data structure. It is used
|
|
// solely as intended in Ethereum abiding by the protocol.
|
|
type TxData struct {
|
|
AccountNonce uint64 `json:"nonce"`
|
|
Price *big.Int `json:"gasPrice"`
|
|
GasLimit uint64 `json:"gas"`
|
|
Recipient *ethcmn.Address `json:"to" rlp:"nil"` // nil means contract creation
|
|
Amount *big.Int `json:"value"`
|
|
Payload []byte `json:"input"`
|
|
|
|
// signature values
|
|
V *big.Int `json:"v"`
|
|
R *big.Int `json:"r"`
|
|
S *big.Int `json:"s"`
|
|
|
|
// hash is only used when marshaling to JSON
|
|
Hash *ethcmn.Hash `json:"hash" rlp:"-"`
|
|
}
|
|
|
|
// encodableTxData implements the Ethereum transaction data structure. It is used
|
|
// solely as intended in Ethereum abiding by the protocol.
|
|
type encodableTxData struct {
|
|
AccountNonce uint64 `json:"nonce"`
|
|
Price string `json:"gasPrice"`
|
|
GasLimit uint64 `json:"gas"`
|
|
Recipient *ethcmn.Address `json:"to" rlp:"nil"` // nil means contract creation
|
|
Amount string `json:"value"`
|
|
Payload []byte `json:"input"`
|
|
|
|
// signature values
|
|
V string `json:"v"`
|
|
R string `json:"r"`
|
|
S string `json:"s"`
|
|
|
|
// hash is only used when marshaling to JSON
|
|
Hash *ethcmn.Hash `json:"hash" rlp:"-"`
|
|
}
|
|
|
|
// MarshalAmino defines custom encoding scheme for TxData
|
|
func (td TxData) MarshalAmino() ([]byte, error) {
|
|
gasPrice, err := utils.MarshalBigInt(td.Price)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
amount, err := utils.MarshalBigInt(td.Amount)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
v, err := utils.MarshalBigInt(td.V)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
r, err := utils.MarshalBigInt(td.R)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
s, err := utils.MarshalBigInt(td.S)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
e := encodableTxData{
|
|
AccountNonce: td.AccountNonce,
|
|
Price: gasPrice,
|
|
GasLimit: td.GasLimit,
|
|
Recipient: td.Recipient,
|
|
Amount: amount,
|
|
Payload: td.Payload,
|
|
V: v,
|
|
R: r,
|
|
S: s,
|
|
Hash: td.Hash,
|
|
}
|
|
|
|
return ModuleCdc.MarshalBinaryBare(e)
|
|
}
|
|
|
|
// UnmarshalAmino defines custom decoding scheme for TxData
|
|
func (td *TxData) UnmarshalAmino(data []byte) error {
|
|
var e encodableTxData
|
|
err := ModuleCdc.UnmarshalBinaryBare(data, &e)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
td.AccountNonce = e.AccountNonce
|
|
td.GasLimit = e.GasLimit
|
|
td.Recipient = e.Recipient
|
|
td.Payload = e.Payload
|
|
td.Hash = e.Hash
|
|
|
|
price, err := utils.UnmarshalBigInt(e.Price)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if td.Price != nil {
|
|
td.Price.Set(price)
|
|
} else {
|
|
td.Price = price
|
|
}
|
|
|
|
amt, err := utils.UnmarshalBigInt(e.Amount)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if td.Amount != nil {
|
|
td.Amount.Set(amt)
|
|
} else {
|
|
td.Amount = amt
|
|
}
|
|
|
|
v, err := utils.UnmarshalBigInt(e.V)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if td.V != nil {
|
|
td.V.Set(v)
|
|
} else {
|
|
td.V = v
|
|
}
|
|
|
|
r, err := utils.UnmarshalBigInt(e.R)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if td.R != nil {
|
|
td.R.Set(r)
|
|
} else {
|
|
td.R = r
|
|
}
|
|
|
|
s, err := utils.UnmarshalBigInt(e.S)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if td.S != nil {
|
|
td.S.Set(s)
|
|
} else {
|
|
td.S = s
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// TODO: Implement JSON marshaling/ unmarshaling for this type
|
|
|
|
// TODO: Implement YAML marshaling/ unmarshaling for this type
|