Co-authored-by: son trinh <trinhleson2000@gmail.com>
This commit is contained in:
co-authored by
son trinh
parent
029d6e5106
commit
7d801cc3c9
@@ -73,7 +73,7 @@ const (
|
||||
FlagPageKey = "page-key"
|
||||
FlagOffset = "offset"
|
||||
FlagCountTotal = "count-total"
|
||||
FlagTimeoutHeight = "timeout-height"
|
||||
FlagTimeoutTimestamp = "timeout-timestamp"
|
||||
FlagUnordered = "unordered"
|
||||
FlagKeyAlgorithm = "algo"
|
||||
FlagKeyType = "key-type"
|
||||
@@ -136,8 +136,8 @@ func AddTxFlagsToCmd(cmd *cobra.Command) {
|
||||
f.Bool(FlagOffline, false, "Offline mode (does not allow any online functionality)")
|
||||
f.BoolP(FlagSkipConfirmation, "y", false, "Skip tx broadcasting prompt confirmation")
|
||||
f.String(FlagSignMode, "", "Choose sign mode (direct|amino-json|direct-aux|textual), this is an advanced feature")
|
||||
f.Uint64(FlagTimeoutHeight, 0, "Set a block timeout height to prevent the tx from being committed past a certain height")
|
||||
f.Bool(FlagUnordered, false, "Enable unordered transaction delivery; must be used in conjunction with --timeout-height")
|
||||
f.Int64(FlagTimeoutTimestamp, 0, "Set a block timeout timestamp to prevent the tx from being committed past a certain time")
|
||||
f.Bool(FlagUnordered, false, "Enable unordered transaction delivery; must be used in conjunction with --timeout-timestamp")
|
||||
f.String(FlagFeePayer, "", "Fee payer pays fees for the transaction instead of deducting from the signer")
|
||||
f.String(FlagFeeGranter, "", "Fee granter grants fees for the transaction")
|
||||
f.String(FlagTip, "", "Tip is the amount that is going to be transferred to the fee payer on the target chain. This flag is only valid when used with --aux, and is ignored if the target chain didn't enable the TipDecorator")
|
||||
|
||||
@@ -2,9 +2,11 @@ package tx
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/cosmos/gogoproto/proto"
|
||||
"google.golang.org/protobuf/types/known/anypb"
|
||||
"google.golang.org/protobuf/types/known/timestamppb"
|
||||
|
||||
txv1beta1 "cosmossdk.io/api/cosmos/tx/v1beta1"
|
||||
txsigning "cosmossdk.io/x/tx/signing"
|
||||
@@ -58,6 +60,14 @@ func (b *AuxTxBuilder) SetTimeoutHeight(height uint64) {
|
||||
b.auxSignerData.SignDoc.BodyBytes = nil
|
||||
}
|
||||
|
||||
// SetTimeoutTimestamp sets a timeout timestamp in the tx.
|
||||
func (b *AuxTxBuilder) SetTimeoutTimestamp(timestamp time.Time) {
|
||||
b.checkEmptyFields()
|
||||
|
||||
b.body.TimeoutTimestamp = timestamppb.New(timestamp)
|
||||
b.auxSignerData.SignDoc.BodyBytes = nil
|
||||
}
|
||||
|
||||
// SetMsgs sets an array of Msgs in the tx.
|
||||
func (b *AuxTxBuilder) SetMsgs(msgs ...sdk.Msg) error {
|
||||
anys := make([]*anypb.Any, len(msgs))
|
||||
@@ -209,9 +219,10 @@ func (b *AuxTxBuilder) GetSignBytes() ([]byte, error) {
|
||||
})
|
||||
|
||||
auxBody := &txv1beta1.TxBody{
|
||||
Messages: body.Messages,
|
||||
Memo: body.Memo,
|
||||
TimeoutHeight: body.TimeoutHeight,
|
||||
Messages: body.Messages,
|
||||
Memo: body.Memo,
|
||||
TimeoutHeight: body.TimeoutHeight,
|
||||
TimeoutTimestamp: body.TimeoutTimestamp,
|
||||
// AuxTxBuilder has no concern with extension options, so we set them to nil.
|
||||
// This preserves pre-PR#16025 behavior where extension options were ignored, this code path:
|
||||
// https://github.com/cosmos/cosmos-sdk/blob/ac3c209326a26b46f65a6cc6f5b5ebf6beb79b38/client/tx/aux_builder.go#L193
|
||||
|
||||
+13
-2
@@ -6,6 +6,7 @@ import (
|
||||
"math/big"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/cosmos/go-bip39"
|
||||
"github.com/spf13/pflag"
|
||||
@@ -33,6 +34,7 @@ type Factory struct {
|
||||
sequence uint64
|
||||
gas uint64
|
||||
timeoutHeight uint64
|
||||
timeoutTimestamp time.Time
|
||||
gasAdjustment float64
|
||||
chainID string
|
||||
fromName string
|
||||
@@ -86,7 +88,8 @@ func NewFactoryCLI(clientCtx client.Context, flagSet *pflag.FlagSet) (Factory, e
|
||||
|
||||
gasAdj := clientCtx.Viper.GetFloat64(flags.FlagGasAdjustment)
|
||||
memo := clientCtx.Viper.GetString(flags.FlagNote)
|
||||
timeoutHeight := clientCtx.Viper.GetUint64(flags.FlagTimeoutHeight)
|
||||
timestampUnix := clientCtx.Viper.GetInt64(flags.FlagTimeoutTimestamp)
|
||||
timeoutTimestamp := time.Unix(timestampUnix, 0)
|
||||
unordered := clientCtx.Viper.GetBool(flags.FlagUnordered)
|
||||
|
||||
gasStr := clientCtx.Viper.GetString(flags.FlagGas)
|
||||
@@ -104,7 +107,7 @@ func NewFactoryCLI(clientCtx client.Context, flagSet *pflag.FlagSet) (Factory, e
|
||||
simulateAndExecute: gasSetting.Simulate,
|
||||
accountNumber: accNum,
|
||||
sequence: accSeq,
|
||||
timeoutHeight: timeoutHeight,
|
||||
timeoutTimestamp: timeoutTimestamp,
|
||||
unordered: unordered,
|
||||
gasAdjustment: gasAdj,
|
||||
memo: memo,
|
||||
@@ -135,6 +138,7 @@ func (f Factory) Fees() sdk.Coins { return f.fees }
|
||||
func (f Factory) GasPrices() sdk.DecCoins { return f.gasPrices }
|
||||
func (f Factory) AccountRetriever() client.AccountRetriever { return f.accountRetriever }
|
||||
func (f Factory) TimeoutHeight() uint64 { return f.timeoutHeight }
|
||||
func (f Factory) TimeoutTimestamp() time.Time { return f.timeoutTimestamp }
|
||||
func (f Factory) Unordered() bool { return f.unordered }
|
||||
func (f Factory) FromName() string { return f.fromName }
|
||||
|
||||
@@ -249,6 +253,12 @@ func (f Factory) WithTimeoutHeight(height uint64) Factory {
|
||||
return f
|
||||
}
|
||||
|
||||
// WithTimeoutTimestamp returns a copy of the Factory with an updated timeout timestamp.
|
||||
func (f Factory) WithTimeoutTimestamp(timestamp time.Time) Factory {
|
||||
f.timeoutTimestamp = timestamp
|
||||
return f
|
||||
}
|
||||
|
||||
// WithUnordered returns a copy of the Factory with an updated unordered field.
|
||||
func (f Factory) WithUnordered(v bool) Factory {
|
||||
f.unordered = v
|
||||
@@ -361,6 +371,7 @@ func (f Factory) BuildUnsignedTx(msgs ...sdk.Msg) (client.TxBuilder, error) {
|
||||
tx.SetFeeGranter(f.feeGranter)
|
||||
tx.SetFeePayer(f.feePayer)
|
||||
tx.SetTimeoutHeight(f.TimeoutHeight())
|
||||
tx.SetTimeoutTimestamp(f.TimeoutTimestamp())
|
||||
tx.SetUnordered(f.Unordered())
|
||||
|
||||
if etx, ok := tx.(client.ExtendedTxBuilder); ok {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"cosmossdk.io/x/auth/signing"
|
||||
txsigning "cosmossdk.io/x/tx/signing"
|
||||
|
||||
@@ -48,6 +50,7 @@ type (
|
||||
SetFeePayer(feePayer sdk.AccAddress)
|
||||
SetGasLimit(limit uint64)
|
||||
SetTimeoutHeight(height uint64)
|
||||
SetTimeoutTimestamp(timestamp time.Time)
|
||||
SetUnordered(v bool)
|
||||
SetFeeGranter(feeGranter sdk.AccAddress)
|
||||
AddAuxSignerData(tx.AuxSignerData) error
|
||||
|
||||
+2
-2
@@ -27,7 +27,7 @@ Flags:
|
||||
-o, --output string Output format (text|json) (default "json")
|
||||
-s, --sequence uint The sequence number of the signing account (offline mode only)
|
||||
--sign-mode string Choose sign mode (direct|amino-json|direct-aux|textual), this is an advanced feature
|
||||
--timeout-height uint Set a block timeout height to prevent the tx from being committed past a certain height
|
||||
--timeout-timestamp int Set a block timeout timestamp to prevent the tx from being committed past a certain time
|
||||
--tip string Tip is the amount that is going to be transferred to the fee payer on the target chain. This flag is only valid when used with --aux, and is ignored if the target chain didn't enable the TipDecorator
|
||||
--unordered Enable unordered transaction delivery; must be used in conjunction with --timeout-height
|
||||
--unordered Enable unordered transaction delivery; must be used in conjunction with --timeout-timestamp
|
||||
-y, --yes Skip tx broadcasting prompt confirmation
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"body":{"messages":[{"@type":"/cosmos.bank.v1beta1.MsgSend","from_address":"cosmos1y74p8wyy4enfhfn342njve6cjmj5c8dtl6emdk","to_address":"cosmos1y74p8wyy4enfhfn342njve6cjmj5c8dtl6emdk","amount":[{"denom":"foo","amount":"1"}]}]},"auth_info":{"fee":{"gas_limit":"200000"}}}
|
||||
{"body":{"messages":[{"@type":"/cosmos.bank.v1beta1.MsgSend","from_address":"cosmos1y74p8wyy4enfhfn342njve6cjmj5c8dtl6emdk","to_address":"cosmos1y74p8wyy4enfhfn342njve6cjmj5c8dtl6emdk","amount":[{"denom":"foo","amount":"1"}]}],"timeout_timestamp":"1970-01-01T00:00:00Z"},"auth_info":{"fee":{"gas_limit":"200000"}}}
|
||||
@@ -113,6 +113,7 @@ func (b *builder) GetSigningTxData() (txsigning.TxData, error) {
|
||||
Messages: msgs,
|
||||
Memo: body.Memo,
|
||||
TimeoutHeight: body.TimeoutHeight,
|
||||
TimeoutTimestamp: body.TimeoutTimestamp,
|
||||
ExtensionOptions: extOptions,
|
||||
NonCriticalExtensionOptions: nonCriticalExtOptions,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user