From 43a5cf4221d5820c1e65efe9b6f75a68212a64d5 Mon Sep 17 00:00:00 2001 From: Arijit Das Date: Tue, 25 May 2021 20:56:20 +0530 Subject: [PATCH 1/7] fix(dot/core): Fix handle transaction message test. --- dot/core/messages.go | 5 ++--- dot/core/messages_test.go | 27 +++++++++++---------------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/dot/core/messages.go b/dot/core/messages.go index 8062a201c3..cda8fa8533 100644 --- a/dot/core/messages.go +++ b/dot/core/messages.go @@ -18,6 +18,7 @@ package core import ( "github.com/ChainSafe/gossamer/dot/network" + "github.com/ChainSafe/gossamer/dot/types" "github.com/ChainSafe/gossamer/lib/transaction" ) @@ -33,10 +34,8 @@ func (s *Service) HandleTransactionMessage(msg *network.TransactionMessage) erro txs := msg.Extrinsics for _, tx := range txs { - tx := tx // pin - // validate each transaction - val, err := s.rt.ValidateTransaction(tx) + val, err := s.rt.ValidateTransaction(append([]byte{byte(types.TxnExternal)}, tx...)) if err != nil { logger.Error("failed to validate transaction", "err", err) return err diff --git a/dot/core/messages_test.go b/dot/core/messages_test.go index 266f87fdaf..1c89c47fc9 100644 --- a/dot/core/messages_test.go +++ b/dot/core/messages_test.go @@ -27,11 +27,6 @@ import ( "github.com/ChainSafe/gossamer/lib/common" "github.com/ChainSafe/gossamer/lib/crypto/sr25519" "github.com/ChainSafe/gossamer/lib/keystore" - "github.com/ChainSafe/gossamer/lib/runtime" - "github.com/ChainSafe/gossamer/lib/runtime/wasmer" - "github.com/ChainSafe/gossamer/lib/trie" - - log "github.com/ChainSafe/log15" "github.com/stretchr/testify/require" ) @@ -76,12 +71,6 @@ func TestService_ProcessBlockAnnounceMessage(t *testing.T) { } func TestService_HandleTransactionMessage(t *testing.T) { - // this currently fails due to not being able to call validate_transaction - - t.Skip() - tt := trie.NewEmptyTrie() - rt := wasmer.NewTestInstanceWithTrie(t, runtime.NODE_RUNTIME, tt, log.LvlTrace) - kp, err := sr25519.GenerateKeypair() require.Nil(t, err) @@ -91,16 +80,23 @@ func TestService_HandleTransactionMessage(t *testing.T) { ks.Acco.Insert(kp) cfg := &Config{ - Runtime: rt, Keystore: ks, TransactionState: state.NewTransactionState(), IsBlockProducer: true, + BlockProducer: &mockBlockProducer{}, } s := NewTestService(t, cfg) - // https://github.com/paritytech/substrate/blob/5420de3face1349a97eb954ae71c5b0b940c31de/core/transaction-pool/src/tests.rs#L95 - ext := []byte{1, 212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125, 142, 175, 4, 21, 22, 135, 115, 99, 38, 201, 254, 161, 126, 37, 252, 82, 135, 97, 54, 147, 201, 18, 144, 156, 178, 38, 170, 71, 148, 242, 106, 72, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 5, 113, 87, 87, 40, 221, 120, 247, 252, 137, 201, 74, 231, 222, 101, 85, 108, 102, 39, 31, 190, 210, 14, 215, 124, 19, 160, 180, 203, 54, 110, 167, 163, 149, 45, 12, 108, 80, 221, 65, 238, 57, 237, 199, 16, 10, 33, 185, 8, 244, 184, 243, 139, 5, 87, 252, 245, 24, 225, 37, 154, 163, 142} + parentHash := common.MustHexToHash("0x35a28a7dbaf0ba07d1485b0f3da7757e3880509edc8c31d0850cb6dd6219361d") + header, err := types.NewHeader(parentHash, common.Hash{}, common.Hash{}, big.NewInt(1), types.NewEmptyDigest()) + require.NoError(t, err) + + // initialise block header + err = s.rt.InitializeBlock(header) + require.NoError(t, err) + + ext := types.Extrinsic(common.MustHexToBytes("0x410284ffd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d015a3e258da3ea20581b68fe1264a35d1f62d6a0debb1a44e836375eb9921ba33e3d0f265f2da33c9ca4e10490b03918300be902fcb229f806c9cf99af4cc10f8c0000000600ff8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480b00c465f14670")) msg := &network.TransactionMessage{Extrinsics: []types.Extrinsic{ext}} @@ -109,6 +105,5 @@ func TestService_HandleTransactionMessage(t *testing.T) { pending := s.transactionState.(*state.TransactionState).Pending() require.NotEqual(t, 0, len(pending)) - tx := []byte(pending[0].Extrinsic) - require.Equal(t, ext, tx) + require.Equal(t, ext, pending[0].Extrinsic) } From b803d2a301d90f88cd98df4170c7cbea1c04f90f Mon Sep 17 00:00:00 2001 From: Arijit Das Date: Fri, 28 May 2021 11:07:47 +0530 Subject: [PATCH 2/7] Remove hardcoded extrinsic value. --- dot/core/messages_test.go | 72 +++++++++++++++++++++++++++++++++------ 1 file changed, 61 insertions(+), 11 deletions(-) diff --git a/dot/core/messages_test.go b/dot/core/messages_test.go index 1c89c47fc9..6a0940916d 100644 --- a/dot/core/messages_test.go +++ b/dot/core/messages_test.go @@ -27,6 +27,10 @@ import ( "github.com/ChainSafe/gossamer/lib/common" "github.com/ChainSafe/gossamer/lib/crypto/sr25519" "github.com/ChainSafe/gossamer/lib/keystore" + "github.com/ChainSafe/gossamer/lib/runtime" + "github.com/ChainSafe/gossamer/lib/scale" + "github.com/centrifuge/go-substrate-rpc-client/v2/signature" + ctypes "github.com/centrifuge/go-substrate-rpc-client/v2/types" "github.com/stretchr/testify/require" ) @@ -70,11 +74,58 @@ func TestService_ProcessBlockAnnounceMessage(t *testing.T) { require.Equal(t, expected, net.Message) } +func createExtrinsics(t *testing.T, rt runtime.Instance, genHash common.Hash, nonce uint64) (types.Extrinsic, error) { + t.Helper() + bob, err := ctypes.NewAddressFromHexAccountID("0x90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22") + require.NoError(t, err) + + rawMeta, err := rt.Metadata() + require.NoError(t, err) + + decoded, err := scale.Decode(rawMeta, []byte{}) + require.NoError(t, err) + + meta := &ctypes.Metadata{} + err = ctypes.DecodeFromBytes(decoded.([]byte), meta) + require.NoError(t, err) + + rv, err := rt.Version() + require.NoError(t, err) + + c, err := ctypes.NewCall(meta, "Balances.transfer", bob, ctypes.NewUCompactFromUInt(12345)) + require.NoError(t, err) + + // Create the extrinsic + ext := ctypes.NewExtrinsic(c) + + o := ctypes.SignatureOptions{ + BlockHash: ctypes.Hash(genHash), + Era: ctypes.ExtrinsicEra{IsImmortalEra: true}, + GenesisHash: ctypes.Hash(genHash), + Nonce: ctypes.NewUCompactFromUInt(nonce), + SpecVersion: ctypes.U32(rv.SpecVersion()), + Tip: ctypes.NewUCompactFromUInt(0), + TransactionVersion: ctypes.U32(rv.TransactionVersion()), + } + + // Sign the transaction using Alice's default account + err = ext.Sign(signature.TestKeyringPairAlice, o) + if err != nil { + return nil, err + } + + extEnc, err := ctypes.EncodeToHexString(ext) + if err != nil { + return nil, err + } + + extBytes := types.Extrinsic(common.MustHexToBytes(extEnc)) + return extBytes, nil +} + func TestService_HandleTransactionMessage(t *testing.T) { kp, err := sr25519.GenerateKeypair() - require.Nil(t, err) - - // TODO: load BABE authority key + require.NoError(t, err) ks := keystore.NewGlobalKeystore() ks.Acco.Insert(kp) @@ -87,23 +138,22 @@ func TestService_HandleTransactionMessage(t *testing.T) { } s := NewTestService(t, cfg) - - parentHash := common.MustHexToHash("0x35a28a7dbaf0ba07d1485b0f3da7757e3880509edc8c31d0850cb6dd6219361d") - header, err := types.NewHeader(parentHash, common.Hash{}, common.Hash{}, big.NewInt(1), types.NewEmptyDigest()) + genHash := s.blockState.GenesisHash() + header, err := types.NewHeader(genHash, common.Hash{}, common.Hash{}, big.NewInt(1), types.NewEmptyDigest()) require.NoError(t, err) // initialise block header err = s.rt.InitializeBlock(header) require.NoError(t, err) - ext := types.Extrinsic(common.MustHexToBytes("0x410284ffd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d015a3e258da3ea20581b68fe1264a35d1f62d6a0debb1a44e836375eb9921ba33e3d0f265f2da33c9ca4e10490b03918300be902fcb229f806c9cf99af4cc10f8c0000000600ff8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a480b00c465f14670")) - - msg := &network.TransactionMessage{Extrinsics: []types.Extrinsic{ext}} + extBytes, err := createExtrinsics(t, s.rt, genHash, 0) + require.NoError(t, err) + msg := &network.TransactionMessage{Extrinsics: []types.Extrinsic{extBytes}} err = s.HandleTransactionMessage(msg) - require.Nil(t, err) + require.NoError(t, err) pending := s.transactionState.(*state.TransactionState).Pending() require.NotEqual(t, 0, len(pending)) - require.Equal(t, ext, pending[0].Extrinsic) + require.Equal(t, extBytes, pending[0].Extrinsic) } From ead6b0d79023545306d86b7755a7f91988dc998c Mon Sep 17 00:00:00 2001 From: Arijit Das Date: Fri, 28 May 2021 20:31:39 +0530 Subject: [PATCH 3/7] Minor fix. --- dot/core/messages_test.go | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/dot/core/messages_test.go b/dot/core/messages_test.go index 6a0940916d..991219b68c 100644 --- a/dot/core/messages_test.go +++ b/dot/core/messages_test.go @@ -74,7 +74,7 @@ func TestService_ProcessBlockAnnounceMessage(t *testing.T) { require.Equal(t, expected, net.Message) } -func createExtrinsics(t *testing.T, rt runtime.Instance, genHash common.Hash, nonce uint64) (types.Extrinsic, error) { +func createExtrinsics(t *testing.T, rt runtime.Instance, genHash common.Hash, nonce uint64) types.Extrinsic { t.Helper() bob, err := ctypes.NewAddressFromHexAccountID("0x90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22") require.NoError(t, err) @@ -110,17 +110,13 @@ func createExtrinsics(t *testing.T, rt runtime.Instance, genHash common.Hash, no // Sign the transaction using Alice's default account err = ext.Sign(signature.TestKeyringPairAlice, o) - if err != nil { - return nil, err - } + require.NoError(t, err) extEnc, err := ctypes.EncodeToHexString(ext) - if err != nil { - return nil, err - } + require.NoError(t, err) extBytes := types.Extrinsic(common.MustHexToBytes(extEnc)) - return extBytes, nil + return extBytes } func TestService_HandleTransactionMessage(t *testing.T) { @@ -146,8 +142,7 @@ func TestService_HandleTransactionMessage(t *testing.T) { err = s.rt.InitializeBlock(header) require.NoError(t, err) - extBytes, err := createExtrinsics(t, s.rt, genHash, 0) - require.NoError(t, err) + extBytes := createExtrinsics(t, s.rt, genHash, 0) msg := &network.TransactionMessage{Extrinsics: []types.Extrinsic{extBytes}} err = s.HandleTransactionMessage(msg) From 5d0694abb09de25302ebb7fa1a59da2e246315ce Mon Sep 17 00:00:00 2001 From: Arijit Das Date: Mon, 31 May 2021 20:14:09 +0530 Subject: [PATCH 4/7] Address comment. --- dot/core/messages_test.go | 9 ++++++--- go.mod | 1 - go.sum | 2 -- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dot/core/messages_test.go b/dot/core/messages_test.go index 991219b68c..e005c8d831 100644 --- a/dot/core/messages_test.go +++ b/dot/core/messages_test.go @@ -76,9 +76,6 @@ func TestService_ProcessBlockAnnounceMessage(t *testing.T) { func createExtrinsics(t *testing.T, rt runtime.Instance, genHash common.Hash, nonce uint64) types.Extrinsic { t.Helper() - bob, err := ctypes.NewAddressFromHexAccountID("0x90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22") - require.NoError(t, err) - rawMeta, err := rt.Metadata() require.NoError(t, err) @@ -92,6 +89,12 @@ func createExtrinsics(t *testing.T, rt runtime.Instance, genHash common.Hash, no rv, err := rt.Version() require.NoError(t, err) + keyring, err := keystore.NewSr25519Keyring() + require.NoError(t, err) + + bob, err := ctypes.NewAddressFromHexAccountID(keyring.Bob().Public().Hex()) + require.NoError(t, err) + c, err := ctypes.NewCall(meta, "Balances.transfer", bob, ctypes.NewUCompactFromUInt(12345)) require.NoError(t, err) diff --git a/go.mod b/go.mod index 30a8b0fb26..84bfa0a2dd 100644 --- a/go.mod +++ b/go.mod @@ -50,7 +50,6 @@ require ( github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 github.com/perlin-network/life v0.0.0-20191203030451-05c0e0f7eaea github.com/rs/cors v1.7.0 // indirect - github.com/sirupsen/logrus v1.6.0 github.com/stretchr/testify v1.7.0 github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca // indirect github.com/urfave/cli v1.20.0 diff --git a/go.sum b/go.sum index 13ce535da6..55816427d5 100644 --- a/go.sum +++ b/go.sum @@ -269,7 +269,6 @@ github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQL github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d h1:68u9r4wEvL3gYg2jvAOgROwZ3H+Y3hIDk4tbbmIjcYQ= github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= @@ -608,7 +607,6 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= From 2a0bb698eba993282dc500517a954e5cda877cf0 Mon Sep 17 00:00:00 2001 From: Arijit Das Date: Tue, 1 Jun 2021 11:26:50 +0530 Subject: [PATCH 5/7] Add subkey for macos. --- .github/workflows/tests.yml | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 270b4347de..4b43b61885 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -39,8 +39,17 @@ jobs: - name: Install Subkey run: | - wget -P $HOME/.local/bin/ https://chainbridge.ams3.digitaloceanspaces.com/subkey-v2.0.0 - mv $HOME/.local/bin/subkey-v2.0.0 $HOME/.local/bin/subkey + if [ "$RUNNER_OS" == "Linux" ]; then + wget -P $HOME/.local/bin/ https://chainbridge.ams3.digitaloceanspaces.com/subkey-v2.0.0 + mv $HOME/.local/bin/subkey-v2.0.0 $HOME/.local/bin/subkey + elif [ "$RUNNER_OS" == "macOS" ]; then + wget -P $HOME/.local/bin/ https://chainbridge.ams3.digitaloceanspaces.com/subkey-v2.0.0-macos + mv $HOME/.local/bin/subkey-v2.0.0-macos $HOME/.local/bin/subkey + else + echo "Subkey for $RUNNER_OS is not supported" + exit 1 + fi + chmod +x $HOME/.local/bin/subkey echo "$HOME/.local/bin" >> $GITHUB_PATH From 8f53e05b66d58d13509d56dda90080780c3cf102 Mon Sep 17 00:00:00 2001 From: Arijit Das Date: Tue, 1 Jun 2021 11:58:57 +0530 Subject: [PATCH 6/7] Add subkey in publish code coverage. --- .github/workflows/build.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d8baeb069c..c0b2f5dd08 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -68,6 +68,13 @@ jobs: key: ${{ runner.os }}-go-mod-${{ hashFiles('**/go.sum') }} restore-keys: ${{ runner.os }}-go-mod + - name: Install Subkey + run: | + wget -P $HOME/.local/bin/ https://chainbridge.ams3.digitaloceanspaces.com/subkey-v2.0.0 + mv $HOME/.local/bin/subkey-v2.0.0 $HOME/.local/bin/subkey + chmod +x $HOME/.local/bin/subkey + echo "$HOME/.local/bin" >> $GITHUB_PATH + - name: Generate coverage report run: | go test ./... -short -coverprofile=coverage.out -covermode=atomic -timeout=20m From aa4775683fb774acb4380c11c67401e7931c1061 Mon Sep 17 00:00:00 2001 From: Arijit Das Date: Tue, 1 Jun 2021 12:32:39 +0530 Subject: [PATCH 7/7] Add subkey in coverage report. --- .github/workflows/tests.yml | 7 +++++++ lib/grandpa/round_test.go | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 4b43b61885..a8fbebe58b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -90,6 +90,13 @@ jobs: key: ${{ runner.os }}-go-mod-${{ hashFiles('**/go.sum') }} restore-keys: ${{ runner.os }}-go-mod + - name: Install Subkey + run: | + wget -P $HOME/.local/bin/ https://chainbridge.ams3.digitaloceanspaces.com/subkey-v2.0.0 + mv $HOME/.local/bin/subkey-v2.0.0 $HOME/.local/bin/subkey + chmod +x $HOME/.local/bin/subkey + echo "$HOME/.local/bin" >> $GITHUB_PATH + - name: Generate coverage report run: | go test ./... -short -coverprofile=coverage.out -covermode=atomic -timeout=20m diff --git a/lib/grandpa/round_test.go b/lib/grandpa/round_test.go index d33d6b32e9..949eebd092 100644 --- a/lib/grandpa/round_test.go +++ b/lib/grandpa/round_test.go @@ -105,7 +105,7 @@ func setupGrandpa(t *testing.T, kp *ed25519.Keypair) (*Service, chan GrandpaMess DigestHandler: &mockDigestHandler{}, Voters: voters, Keypair: kp, - LogLvl: log.LvlTrace, + LogLvl: log.LvlInfo, Authority: true, Network: net, }