forked from cerc-io/laconicd-deprecated
cherry picks ethermint
This commit is contained in:
parent
374d249116
commit
77be0bc022
@ -42,6 +42,29 @@ func InitConfig(cmd *cobra.Command) error {
|
||||
return viper.BindPFlag(cli.OutputFlag, cmd.PersistentFlags().Lookup(cli.OutputFlag))
|
||||
}
|
||||
|
||||
// GenerateChainID wraps a cobra command with a RunE function with base 10 integer chain-id random generation
|
||||
// when a chain-id is not provided.
|
||||
func GenerateChainID(baseCmd *cobra.Command) *cobra.Command {
|
||||
// Copy base run command to be used after chain verification
|
||||
baseRunE := baseCmd.RunE
|
||||
|
||||
// Function to replace command's RunE function
|
||||
generateFn := func(cmd *cobra.Command, args []string) error {
|
||||
chainID, _ := cmd.Flags().GetString(flags.FlagChainID)
|
||||
|
||||
if chainID != "" {
|
||||
if err := cmd.Flags().Set(flags.FlagChainID, ethermint.GenerateRandomChainID()); err != nil {
|
||||
return fmt.Errorf("could not set random chain-id: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
return baseRunE(cmd, args)
|
||||
}
|
||||
|
||||
baseCmd.RunE = generateFn
|
||||
return baseCmd
|
||||
}
|
||||
|
||||
// ValidateChainID wraps a cobra command with a RunE function with base 10 integer chain-id verification.
|
||||
func ValidateChainID(baseCmd *cobra.Command) *cobra.Command {
|
||||
// Copy base run command to be used after chain verification
|
||||
|
@ -26,10 +26,10 @@ func TestAddTopic(t *testing.T) {
|
||||
|
||||
func TestSubscribe(t *testing.T) {
|
||||
q := NewEventBus()
|
||||
kekSrc := make(<-chan coretypes.ResultEvent)
|
||||
kekSrc := make(chan coretypes.ResultEvent)
|
||||
q.AddTopic("kek", kekSrc)
|
||||
|
||||
lolSrc := make(<-chan coretypes.ResultEvent)
|
||||
lolSrc := make(chan coretypes.ResultEvent)
|
||||
q.AddTopic("lol", lolSrc)
|
||||
|
||||
kekSubC, err := q.Subscribe("kek")
|
||||
@ -69,8 +69,9 @@ func TestSubscribe(t *testing.T) {
|
||||
defer wg.Done()
|
||||
|
||||
time.Sleep(time.Second)
|
||||
<-kekSrc
|
||||
<-lolSrc
|
||||
|
||||
close(kekSrc)
|
||||
close(lolSrc)
|
||||
}()
|
||||
|
||||
wg.Wait()
|
||||
|
@ -44,6 +44,8 @@ func (k *Keeper) EthereumTx(goCtx context.Context, msg *types.MsgEthereumTx) (*t
|
||||
|
||||
txHash := tmtypes.Tx(ctx.TxBytes()).Hash()
|
||||
ethHash := ethcmn.BytesToHash(txHash)
|
||||
blockHash, _ := k.GetBlockHashFromHeight(ctx, ctx.BlockHeight())
|
||||
ethBlockHash := ethcmn.BytesToHash(blockHash)
|
||||
|
||||
var recipient *ethcmn.Address
|
||||
if len(msg.Data.Recipient) > 0 {
|
||||
@ -70,8 +72,7 @@ func (k *Keeper) EthereumTx(goCtx context.Context, msg *types.MsgEthereumTx) (*t
|
||||
// other nodes, causing a consensus error
|
||||
if !st.Simulate {
|
||||
// Prepare db for logs
|
||||
hash, _ := k.GetBlockHashFromHeight(ctx, ctx.BlockHeight())
|
||||
k.Prepare(ctx, ethHash, ethcmn.BytesToHash(hash), k.TxCount)
|
||||
k.Prepare(ctx, ethHash, ethBlockHash, k.TxCount)
|
||||
k.TxCount++
|
||||
}
|
||||
|
||||
@ -87,7 +88,6 @@ func (k *Keeper) EthereumTx(goCtx context.Context, msg *types.MsgEthereumTx) (*t
|
||||
executionResult.Response.Reverted = true
|
||||
|
||||
if !st.Simulate {
|
||||
blockHash, _ := k.GetBlockHashFromHeight(ctx, ctx.BlockHeight())
|
||||
k.SetTxReceiptToHash(ctx, ethHash, &types.TxReceipt{
|
||||
Hash: ethHash.Bytes(),
|
||||
From: sender.Bytes(),
|
||||
|
@ -126,3 +126,13 @@ func validateBlock(block sdk.Int) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// IsIstanbul returns whether the Istanbul version is enabled.
|
||||
func (cc ChainConfig) IsIstanbul() bool {
|
||||
return getBlockValue(cc.IstanbulBlock) != nil
|
||||
}
|
||||
|
||||
// IsHomestead returns whether the Homestead version is enabled.
|
||||
func (cc ChainConfig) IsHomestead() bool {
|
||||
return getBlockValue(cc.HomesteadBlock) != nil
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ var big8 = big.NewInt(8)
|
||||
|
||||
// message type and route constants
|
||||
const (
|
||||
// TypeMsgEthereumTx defines the type string of an Ethereum tranasction
|
||||
// TypeMsgEthereumTx defines the type string of an Ethereum transaction
|
||||
TypeMsgEthereumTx = "ethereum"
|
||||
)
|
||||
|
||||
|
@ -61,7 +61,7 @@ func GetHashFn(ctx sdk.Context, csdb *CommitStateDB) vm.GetHashFunc {
|
||||
case ctx.BlockHeight() == int64(height):
|
||||
// Case 1: The requested height matches the one from the context so we can retrieve the header
|
||||
// hash directly from the context.
|
||||
return HashFromContext(ctx)
|
||||
return csdb.bhash
|
||||
|
||||
case ctx.BlockHeight() > int64(height):
|
||||
// Case 2: if the chain is not the current height we need to retrieve the hash from the store for the
|
||||
@ -190,7 +190,7 @@ func (st *StateTransition) TransitionDb(ctx sdk.Context, config ChainConfig) (re
|
||||
ret, contractAddress, leftOverGas, err = evm.Create(senderRef, st.Payload, gasLimit, st.Amount)
|
||||
|
||||
if err != nil {
|
||||
log.WithField("simulate?", st.Simulate).
|
||||
log.WithField("simulate", st.Simulate).
|
||||
WithField("AccountNonce", st.AccountNonce).
|
||||
WithField("contract", contractAddress.String()).
|
||||
WithError(err).Warningln("evm contract creation failed")
|
||||
|
Loading…
Reference in New Issue
Block a user