Skip to content
Merged
Show file tree
Hide file tree
Changes from 64 commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
f30c29b
backport unordered tx
technicallyty Feb 14, 2025
f0d0d04
fix test
technicallyty Feb 14, 2025
c28ae02
Fix test
technicallyty Feb 14, 2025
17b8543
Merge branch 'release/v0.53.x' into technicallyty/backport-6ec53aaf54…
technicallyty Feb 14, 2025
f9b42d8
update go mod
technicallyty Feb 14, 2025
fa6c344
Merge branch 'release/v0.53.x' into technicallyty/backport-6ec53aaf54…
technicallyty Feb 14, 2025
e254223
feat: [ADR-070] Unordered Transactions (1/2) (#18641)
alexanderbez Jan 4, 2024
ff6063f
import ordering
technicallyty Feb 15, 2025
c56005b
changelog and upgrading
technicallyty Feb 15, 2025
77a4db0
Merge branch 'release/v0.53.x' into technicallyty/backport-6ec53aaf54…
technicallyty Feb 21, 2025
daf1ce6
Merge branch 'release/v0.53.x' into technicallyty/backport-6ec53aaf54…
technicallyty Feb 24, 2025
73aa638
Merge branch 'release/v0.53.x' into technicallyty/backport-6ec53aaf54…
technicallyty Feb 25, 2025
e4fce16
Merge branch 'release/v0.53.x' into technicallyty/backport-6ec53aaf54…
technicallyty Feb 26, 2025
0272e5e
add changelog entry
technicallyty Feb 26, 2025
f815582
remove upgrading for now
technicallyty Feb 26, 2025
4572229
make upgrading.md for v53
technicallyty Feb 26, 2025
b754f48
fix(unorderedtx): issues reported in audit (#21467) (#23727)
technicallyty Feb 26, 2025
426c38d
Merge branch 'release/v0.53.x' into technicallyty/backport-6ec53aaf54…
technicallyty Feb 26, 2025
6274a10
make unordered and timeouttimestamp required together
technicallyty Feb 26, 2025
926b02b
revise adr
technicallyty Feb 26, 2025
9188d9e
lint fixes, proto comment fix
technicallyty Feb 26, 2025
f1cd89f
Merge branch 'release/v0.53.x' into technicallyty/backport-6ec53aaf54…
technicallyty Feb 26, 2025
7f8c878
fix sigverify business and restore ante handlers
technicallyty Feb 26, 2025
70a67aa
Merge branch 'release/v0.53.x' into technicallyty/backport-6ec53aaf54…
Feb 27, 2025
1b6d687
optional utx
technicallyty Feb 27, 2025
43c8f5c
Merge branch 'technicallyty/backport-6ec53aaf54-unorderedtx-part-1' o…
technicallyty Feb 27, 2025
4175dfd
wip tx compat
technicallyty Feb 27, 2025
54653c0
Merge branch 'release/v0.53.x' into technicallyty/23846/add-tx-compat
technicallyty Feb 27, 2025
a746947
wip
technicallyty Feb 28, 2025
3e5ea40
this works, but not really
technicallyty Feb 28, 2025
bc3478b
fixed? i guess.
technicallyty Feb 28, 2025
9cd0fad
Merge branch 'release/v0.53.x' into technicallyty/23846/add-tx-compat
technicallyty Mar 3, 2025
ed3c1cb
use intoanyv2
technicallyty Mar 3, 2025
b3d1193
add some comments
technicallyty Mar 3, 2025
7ba8052
wip compat, add amino support, etc tests
technicallyty Mar 3, 2025
9fb25b3
use pb not pulsar
technicallyty Mar 4, 2025
6d21cac
add since comments
technicallyty Mar 4, 2025
37f521b
better check
technicallyty Mar 4, 2025
5e098b9
added systemtest wip
technicallyty Mar 5, 2025
8941f38
legacy initializer
technicallyty Mar 6, 2025
a381b4a
Merge branch 'release/v0.53.x' into technicallyty/23846/add-tx-compat
technicallyty Mar 6, 2025
2576133
wip things are working in tests
technicallyty Mar 6, 2025
0f6de3a
finally.
technicallyty Mar 6, 2025
12819f7
make sure timestamp doesnt get time.Time defaulted
technicallyty Mar 6, 2025
1206e98
this test is better
technicallyty Mar 6, 2025
d1d63a7
Merge branch 'release/v0.53.x' into technicallyty/23846/add-tx-compat
technicallyty Mar 6, 2025
ec5b1b4
remove tx body compat
technicallyty Mar 6, 2025
f85114a
wip downloader
technicallyty Mar 7, 2025
eda6585
build-50
technicallyty Mar 7, 2025
121e963
ok
technicallyty Mar 7, 2025
7366542
ok
technicallyty Mar 8, 2025
8ad7b1e
Merge branch 'release/v0.53.x' into technicallyty/23846/add-tx-compat
technicallyty Mar 8, 2025
f569e09
update makefile
technicallyty Mar 8, 2025
b64fac5
Merge branch 'technicallyty/23846/add-tx-compat' of ssh://github.com/…
technicallyty Mar 8, 2025
77e0a84
all cases done
technicallyty Mar 8, 2025
1fe91c9
all good
technicallyty Mar 8, 2025
66d58b6
check error
technicallyty Mar 10, 2025
bb5871c
ok fixed
technicallyty Mar 10, 2025
167e0b9
Merge branch 'release/v0.53.x' into technicallyty/23846/add-tx-compat
aaronc Mar 10, 2025
cd274f4
linter
technicallyty Mar 10, 2025
1479eb1
make some fixes
technicallyty Mar 12, 2025
c0d692a
comment explaining why we do this
technicallyty Mar 12, 2025
0739e89
Merge branch 'release/v0.53.x' into technicallyty/23846/add-tx-compat
technicallyty Mar 13, 2025
18fef18
code comments where we only set timeouttimestamp if we got a non-zero…
technicallyty Mar 14, 2025
c292399
mispelled compat
technicallyty Mar 17, 2025
b4f955a
Merge branch 'release/v0.53.x' into technicallyty/23846/add-tx-compat
technicallyty Mar 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 35 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -496,9 +496,43 @@ localnet-debug: localnet-stop localnet-build-dlv localnet-build-nodes

.PHONY: localnet-start localnet-stop localnet-debug localnet-build-env localnet-build-dlv localnet-build-nodes

test-system: build
test-system: build-v50 build
mkdir -p ./tests/systemtests/binaries/
cp $(BUILDDIR)/simd ./tests/systemtests/binaries/
mkdir -p ./tests/systemtests/binaries/v0.50
mv $(BUILDDIR)/simdv50 ./tests/systemtests/binaries/v0.50/simd
$(MAKE) -C tests/systemtests test
.PHONY: test-system

# build-v50 checks out the v0.50.x branch, builds the binary, and renames it to simdv50.
build-v50:
@echo "Starting v50 build process..."
git_status=$$(git status --porcelain) && \
has_changes=false && \
if [ -n "$$git_status" ]; then \
echo "Stashing uncommitted changes..." && \
git stash push -m "Temporary stash for v50 build" && \
has_changes=true; \
else \
echo "No changes to stash"; \
fi && \
echo "Saving current reference..." && \
CURRENT_REF=$$(git symbolic-ref --short HEAD 2>/dev/null || git rev-parse HEAD) && \
echo "Checking out release branch..." && \
git checkout release/v0.50.x && \
echo "Building v50 binary..." && \
make build && \
mv build/simd build/simdv50 && \
echo "Returning to original branch..." && \
if [ "$$CURRENT_REF" = "HEAD" ]; then \
git checkout $$(git rev-parse HEAD); \
else \
git checkout $$CURRENT_REF; \
fi && \
if [ "$$has_changes" = "true" ]; then \
echo "Reapplying stashed changes..." && \
git stash pop || echo "Warning: Could not pop stash, your changes may be in the stash list"; \
else \
echo "No changes to reapply"; \
fi
.PHONY: build-v50
13 changes: 8 additions & 5 deletions api/cosmos/tx/v1beta1/tx.pulsar.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 8 additions & 4 deletions client/tx/aux_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,14 @@

// 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
// Only set TimeoutTimestamp if we have a non-zero time.Time.
// Setting timestamppb.New() with a zero/default value time.Time results in a non-zero timestamppb.Timestamp,
// which causes the value to show up in the signature - breaking <v0.53.x compatability.

Check failure on line 67 in client/tx/aux_builder.go

View workflow job for this annotation

GitHub Actions / golangci-lint

`compatability` is a misspelling of `compatibility` (misspell)
if !timestamp.IsZero() && timestamp.Unix() > 0 {
b.checkEmptyFields()
b.body.TimeoutTimestamp = timestamppb.New(timestamp)
b.auxSignerData.SignDoc.BodyBytes = nil
}
}

// SetMsgs sets an array of Msgs in the tx.
Expand Down
4 changes: 4 additions & 0 deletions proto/cosmos/tx/v1beta1/tx.proto
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,8 @@ message TxBody {
// Note, when set to true, the existing 'timeout_timestamp' value must
// be set and will be used to correspond to a timestamp in which the transaction is deemed
// valid.
//
// Since: cosmos-sdk 0.53
bool unordered = 4;

// timeout_timestamp is the block time after which this transaction will not
Expand All @@ -131,6 +133,8 @@ message TxBody {
// Note, if unordered=true this value MUST be set
// and will act as a short-lived TTL in which the transaction is deemed valid
// and kept in memory to prevent duplicates.
//
// Since: cosmos-sdk 0.53
google.protobuf.Timestamp timeout_timestamp = 5 [(gogoproto.nullable) = true, (gogoproto.stdtime) = true];

// extension_options are arbitrary options that can be added by chains
Expand Down
8 changes: 8 additions & 0 deletions systemtests/cli.go
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,14 @@ func (c CLIWrapper) clone(mutator ...func(r *CLIWrapper)) CLIWrapper {
return *r
}

// RunOnly just runs the command, returns the output. and does nothing else
func (c CLIWrapper) RunOnly(args ...string) (string, bool) {
c.t.Helper()
args = c.WithTXFlags(args...)
output, ok := c.run(args)
return output, ok
}

// Run main entry for executing cli commands.
// When configured, method blocks until tx is committed.
func (c CLIWrapper) Run(args ...string) string {
Expand Down
5 changes: 2 additions & 3 deletions systemtests/system.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,9 +86,8 @@ func NewSystemUnderTest(execBinary string, verbose bool, nodesCount int, blockTi
}
nameTokens := ExecBinaryUnversionedRegExp.FindAllString(execBinary, 1)
if len(nameTokens) == 0 || nameTokens[0] == "" {
panic("failed to parse project name from binary")
panic("failed to parse project name from binary: " + execBinary)
}

execBinary = filepath.Join(WorkDir, "binaries", execBinary)
s := &SystemUnderTest{
chainID: "testing",
Expand Down Expand Up @@ -192,7 +191,7 @@ func (s *SystemUnderTest) StartChain(t *testing.T, xargs ...string) {
return true
}),
)
s.AwaitNextBlock(t, 4e9)
s.AwaitNextBlock(t, 10e9)
}

// MarkDirty whole chain will be reset when marked dirty
Expand Down
48 changes: 48 additions & 0 deletions systemtests/testnet_init.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,50 @@ import (
"github.com/creachadair/tomledit/parser"
)

type LegacySingleNode struct {
execBinary string
workDir string
chainID string
outputDir string
minGasPrice string
log func(string)
}

// NewLegacySingleNodeInitializer constructor
func NewLegacySingleNodeInitializer(
execBinary, workDir, chainID, outputDir string,
minGasPrice string,
log func(string),
) *LegacySingleNode {
return &LegacySingleNode{
execBinary: execBinary,
workDir: workDir,
chainID: chainID,
outputDir: outputDir,
minGasPrice: minGasPrice,
log: log,
}
}

func (s LegacySingleNode) Initialize() {
args := []string{
"testnet",
"init-files",
"--chain-id=" + s.chainID,
"--output-dir=" + s.outputDir,
"--v=1",
"--keyring-backend=test",
"--minimum-gas-prices=" + s.minGasPrice,
}

s.log(fmt.Sprintf("+++ %s %s\n", s.execBinary, strings.Join(args, " ")))
out, err := RunShellCmd(s.execBinary, args...)
if err != nil {
panic(err)
}
s.log(out)
}

// SingleHostTestnetCmdInitializer default testnet cmd that supports the --single-host param
type SingleHostTestnetCmdInitializer struct {
execBinary string
Expand Down Expand Up @@ -45,6 +89,10 @@ func NewSingleHostTestnetCmdInitializer(
}
}

func LegacyInitializerWithBinary(binary string, sut *SystemUnderTest) TestnetInitializer {
return NewLegacySingleNodeInitializer(binary, WorkDir, sut.chainID, sut.outputDir, sut.minGasPrice, sut.Log)
}

// InitializerWithBinary creates new SingleHostTestnetCmdInitializer from sut with given binary
func InitializerWithBinary(binary string, sut *SystemUnderTest) TestnetInitializer {
return NewSingleHostTestnetCmdInitializer(
Expand Down
28 changes: 14 additions & 14 deletions tests/systemtests/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,20 @@ replace (

require (
cosmossdk.io/systemtests v0.0.0-00010101000000-000000000000
github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect
github.com/cosmos/cosmos-sdk v0.50.12 // indirect
github.com/cosmos/gogogateway v1.2.0 // indirect
github.com/cosmos/gogoproto v1.7.0 // indirect
github.com/cosmos/iavl v1.2.2 // indirect
github.com/dvsekhvalnov/jose2go v1.6.0 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/gorilla/mux v1.8.1 // indirect
github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/prometheus/client_golang v1.21.0 // indirect
github.com/spf13/cast v1.7.1 // indirect
github.com/spf13/cobra v1.9.1 // indirect
github.com/spf13/pflag v1.0.6 // indirect
github.com/stretchr/testify v1.10.0
github.com/tidwall/gjson v1.18.0
)
Expand Down Expand Up @@ -48,12 +62,7 @@ require (
github.com/cometbft/cometbft-db v0.14.1 // indirect
github.com/cosmos/btcutil v1.0.5 // indirect
github.com/cosmos/cosmos-db v1.1.1 // indirect
github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect
github.com/cosmos/cosmos-sdk v0.50.12 // indirect
github.com/cosmos/go-bip39 v1.0.0 // indirect
github.com/cosmos/gogogateway v1.2.0 // indirect
github.com/cosmos/gogoproto v1.7.0 // indirect
github.com/cosmos/iavl v1.2.2 // indirect
github.com/cosmos/ics23/go v0.11.0 // indirect
github.com/cosmos/ledger-cosmos-go v0.14.0 // indirect
github.com/creachadair/tomledit v0.0.27 // indirect
Expand All @@ -64,7 +73,6 @@ require (
github.com/dgraph-io/badger/v4 v4.2.0 // indirect
github.com/dgraph-io/ristretto v0.1.1 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/dvsekhvalnov/jose2go v1.6.0 // indirect
github.com/emicklei/dot v1.6.2 // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
Expand All @@ -78,17 +86,14 @@ require (
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/glog v1.2.4 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/btree v1.1.3 // indirect
github.com/google/flatbuffers v1.12.1 // indirect
github.com/google/go-cmp v0.7.0 // indirect
github.com/google/orderedcode v0.0.1 // indirect
github.com/gorilla/handlers v1.5.2 // indirect
github.com/gorilla/mux v1.8.1 // indirect
github.com/gorilla/websocket v1.5.3 // indirect
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
github.com/hashicorp/go-hclog v1.6.3 // indirect
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
Expand Down Expand Up @@ -121,9 +126,7 @@ require (
github.com/oklog/run v1.1.0 // indirect
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/prometheus/client_golang v1.21.0 // indirect
github.com/prometheus/client_model v0.6.1 // indirect
github.com/prometheus/common v0.62.0 // indirect
github.com/prometheus/procfs v0.15.1 // indirect
Expand All @@ -136,9 +139,6 @@ require (
github.com/sasha-s/go-deadlock v0.3.5 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spf13/afero v1.11.0 // indirect
github.com/spf13/cast v1.7.1 // indirect
github.com/spf13/cobra v1.9.1 // indirect
github.com/spf13/pflag v1.0.6 // indirect
github.com/spf13/viper v1.19.0 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect
Expand Down
80 changes: 80 additions & 0 deletions tests/systemtests/unordered_tx_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,83 @@ func TestUnorderedTXDuplicate(t *testing.T) {
return cli.QueryBalance(account2Addr, "stake") == 5000
}, 10*systest.Sut.BlockTime(), 200*time.Millisecond, "TX was not executed before timeout")
}

func TestTxBackwardsCompatability(t *testing.T) {
// Scenario:
// A transaction generated from a v0.53 chain without unordered and timeout_timestamp flags set should succeed.
// Conversely, a transaction generated from a v0.53 chain with unordered and timeout_timestamp flags set should fail.
var (
denom = "stake"
transferAmount int64 = 1000
testSeed = "scene learn remember glide apple expand quality spawn property shoe lamp carry upset blossom draft reject aim file trash miss script joy only measure"
)
systest.Sut.ResetChain(t)

v53CLI := systest.NewCLIWrapper(t, systest.Sut, systest.Verbose)
// we just get val addr for an address to send things to.
valAddr := v53CLI.GetKeyAddr("node0")
require.NotEmpty(t, valAddr)

// generate a deterministic account. we'll use this seed again later in the v50 chain.
senderAddr := v53CLI.AddKeyFromSeed("account1", testSeed)

//// Now we're going to switch to a v.50 chain.
legacyBinary := systest.WorkDir + "/binaries/v0.50/simd"

// setup the v50 chain. v53 made some changes to testnet command, so we'll have to adjust here.
// this only uses 1 node.
legacySut := systest.NewSystemUnderTest("simd", systest.Verbose, 1, 1*time.Second)
// we need to explicitly set this here as the constructor infers the exec binary is in the "binaries" directory.
legacySut.SetExecBinary(legacyBinary)
legacySut.SetTestnetInitializer(systest.LegacyInitializerWithBinary(legacyBinary, legacySut))
legacySut.SetupChain()
v50CLI := systest.NewCLIWrapper(t, legacySut, systest.Verbose)
v50CLI.AddKeyFromSeed("account1", testSeed)
legacySut.ModifyGenesisCLI(t,
// add some bogus accounts because the v53 chain had 4 nodes which takes account numbers 1-4.
[]string{"genesis", "add-genesis-account", v50CLI.AddKey("foo"), "10000000000stake"},
[]string{"genesis", "add-genesis-account", v50CLI.AddKey("bar"), "10000000000stake"},
[]string{"genesis", "add-genesis-account", v50CLI.AddKey("baz"), "10000000000stake"},
// we need our sender to be account 5 because that's how it was signed in the v53 scenario.
[]string{"genesis", "add-genesis-account", senderAddr, "10000000000stake"},
)

legacySut.StartChain(t)

bankSendCmdArgs := []string{"tx", "bank", "send", senderAddr, valAddr, fmt.Sprintf("%d%s", transferAmount, denom), "--chain-id=" + v50CLI.ChainID(), "--fees=10stake", "--sign-mode=direct"}
res, ok := v53CLI.RunOnly(bankSendCmdArgs...)
require.True(t, ok)

response, ok := v50CLI.AwaitTxCommitted(res, 15*time.Second)
require.True(t, ok)
code := gjson.Get(response, "code").Int()
require.Equal(t, int64(0), code)

bankSendCmdArgs = []string{"tx", "bank", "send", senderAddr, valAddr, fmt.Sprintf("%d%s", transferAmount, denom), "--chain-id=" + v50CLI.ChainID(), "--fees=10stake", "--sign-mode=direct", "--unordered", "--timeout-timestamp=10000"}
res, ok = v53CLI.RunOnly(bankSendCmdArgs...)
require.True(t, ok)

code = gjson.Get(res, "code").Int()
require.Equal(t, int64(2), code)
require.Contains(t, res, "errUnknownField")
legacySut.StopChain()

// Now start a v53 chain, and send a transaction from a v50 client.
// generate a deterministic account. we'll use this seed again later in the v50 chain.
systest.Sut.SetupChain()
systest.Sut.ModifyGenesisCLI(t,
// we need our sender to be account 5 because that's how it was signed in the v53 scenario.
[]string{"genesis", "add-genesis-account", senderAddr, "10000000000stake"},
)
systest.Sut.StartChain(t)

senderAddr = v50CLI.AddKeyFromSeed("account1", testSeed)
bankSendCmdArgs = []string{"tx", "bank", "send", senderAddr, valAddr, fmt.Sprintf("%d%s", transferAmount, denom), "--chain-id=" + v50CLI.ChainID(), "--fees=10stake", "--sign-mode=direct"}
res, ok = v50CLI.RunOnly(bankSendCmdArgs...)
require.True(t, ok)

response, ok = v53CLI.AwaitTxCommitted(res, 15*time.Second)
require.True(t, ok)
code = gjson.Get(response, "code").Int()
require.Equal(t, int64(0), code)
}
Loading
Loading