diff --git a/config/tendermint_test/config.go b/config/tendermint_test/config.go index 418f026dc..cd9a17b18 100644 --- a/config/tendermint_test/config.go +++ b/config/tendermint_test/config.go @@ -104,25 +104,38 @@ func defaultConfig(moniker string) (defaultConfig string) { return } +// priv keys generated deterministically eg rpc/tests/helpers.go var defaultGenesis = `{ "chain_id" : "tendermint_test", "accounts": [ { - "address": "1D7A91CB32F758A02EBB9BE1FB6F8DEE56F90D42", - "amount": 200000000 + "address": "E9B5D87313356465FAE33C406CE2C2979DE60BCB", + "amount": 200000000 }, { - "address": "AC89A6DDF4C309A89A2C4078CE409A5A7B282270", - "amount": 200000000 + "address": "DFE4AFFA4CEE17CD01CB9E061D77C3ECED29BD88", + "amount": 200000000 + }, + { + "address": "F60D30722E7B497FA532FB3207C3FB29C31B1992", + "amount": 200000000 + }, + { + "address": "336CB40A5EB92E496E19B74FDFF2BA017C877FD6", + "amount": 200000000 + }, + { + "address": "D218F0F439BF0384F6F5EF8D0F8B398D941BD1DC", + "amount": 200000000 } ], "validators": [ { - "pub_key": [1, "06FBAC4E285285D1D91FCBC7E91C780ADA11516F67462340B3980CE2B94940E8"], + "pub_key": [1, "583779C3BFA3F6C7E23C7D830A9C3D023A216B55079AD38BFED1207B94A19548"], "amount": 1000000, "unbond_to": [ { - "address": "1D7A91CB32F758A02EBB9BE1FB6F8DEE56F90D42", + "address": "E9B5D87313356465FAE33C406CE2C2979DE60BCB", "amount": 100000 } ] diff --git a/rpc/test/client_ws_test.go b/rpc/test/client_ws_test.go index 5f94306b6..a310871b4 100644 --- a/rpc/test/client_ws_test.go +++ b/rpc/test/client_ws_test.go @@ -50,7 +50,7 @@ func TestWSBlockchainGrowth(t *testing.T) { // send a transaction and validate the events from listening for both sender and receiver func TestWSSend(t *testing.T) { - toAddr := []byte{20, 143, 25, 63, 16, 177, 83, 29, 91, 91, 54, 23, 233, 46, 190, 121, 122, 34, 86, 54} + toAddr := user[1].Address amt := uint64(100) con := newWSCon(t) @@ -80,7 +80,7 @@ func TestWSDoubleFire(t *testing.T) { con.Close() }() amt := uint64(100) - toAddr := []byte{20, 143, 25, 63, 16, 177, 83, 29, 91, 91, 54, 23, 233, 46, 190, 121, 122, 34, 86, 54} + toAddr := user[1].Address // broadcast the transaction, wait to hear about it waitForEvent(t, con, eid, true, func() { tx := makeDefaultSendTxSigned(t, wsTyp, toAddr, amt) diff --git a/rpc/test/helpers.go b/rpc/test/helpers.go index 5e01a30ce..768704cf2 100644 --- a/rpc/test/helpers.go +++ b/rpc/test/helpers.go @@ -2,7 +2,6 @@ package rpctest import ( "bytes" - "encoding/hex" "strconv" "testing" "time" @@ -29,8 +28,7 @@ var ( mempoolCount = 0 // make keys - userPriv = "C453604BD6480D5538B4C6FD2E3E314B5BCE518D75ADE4DA3DA85AB8ADFD819606FBAC4E285285D1D91FCBC7E91C780ADA11516F67462340B3980CE2B94940E8" - user = makeUsers(2) + user = makeUsers(5) chainID string @@ -40,6 +38,7 @@ var ( } ) +// deterministic account generation, synced with genesis file in config/tendermint_test/config.go func makeUsers(n int) []*account.PrivAccount { accounts := []*account.PrivAccount{} for i := 0; i < n; i++ { @@ -47,13 +46,6 @@ func makeUsers(n int) []*account.PrivAccount { user := account.GenPrivAccountFromSecret(secret) accounts = append(accounts, user) } - - // include our validator - var byteKey [64]byte - userPrivByteSlice, _ := hex.DecodeString(userPriv) - copy(byteKey[:], userPrivByteSlice) - privAcc := account.GenPrivAccountFromKey(byteKey) - accounts[0] = privAcc return accounts } diff --git a/rpc/test/tests.go b/rpc/test/tests.go index 19a5b1b50..641fdd696 100644 --- a/rpc/test/tests.go +++ b/rpc/test/tests.go @@ -9,6 +9,8 @@ import ( "testing" ) +var doNothing = func(eid string, b []byte) error { return nil } + func testStatus(t *testing.T, typ string) { client := clients[typ] resp, err := client.Status() @@ -44,13 +46,13 @@ func testGetAccount(t *testing.T, typ string) { func testSignedTx(t *testing.T, typ string) { amt := uint64(100) - toAddr := []byte{20, 143, 25, 63, 16, 177, 83, 29, 91, 91, 54, 23, 233, 46, 190, 121, 122, 34, 86, 54} + toAddr := user[1].Address testOneSignTx(t, typ, toAddr, amt) - toAddr = []byte{20, 143, 24, 63, 16, 17, 83, 29, 90, 91, 52, 2, 0, 41, 190, 121, 122, 34, 86, 54} + toAddr = user[2].Address testOneSignTx(t, typ, toAddr, amt) - toAddr = []byte{0, 0, 4, 0, 0, 4, 0, 0, 4, 91, 52, 2, 0, 41, 190, 121, 122, 34, 86, 54} + toAddr = user[3].Address testOneSignTx(t, typ, toAddr, amt) } @@ -71,7 +73,7 @@ func testOneSignTx(t *testing.T, typ string, addr []byte, amt uint64) { func testBroadcastTx(t *testing.T, typ string) { amt := uint64(100) - toAddr := []byte{20, 143, 25, 63, 16, 177, 83, 29, 91, 91, 54, 23, 233, 46, 190, 121, 122, 34, 86, 54} + toAddr := user[1].Address tx := makeDefaultSendTxSigned(t, typ, toAddr, amt) receipt := broadcastTx(t, typ, tx) if receipt.CreatesContract > 0 { @@ -120,10 +122,7 @@ func testGetStorage(t *testing.T, typ string) { } // allow it to get mined - waitForEvent(t, con, eid, true, func() { - }, func(eid string, b []byte) error { - return nil - }) + waitForEvent(t, con, eid, true, func() {}, doNothing) mempoolCount = 0 v := getStorage(t, typ, contractAddr, []byte{0x1}) @@ -179,10 +178,7 @@ func testCall(t *testing.T, typ string) { } // allow it to get mined - waitForEvent(t, con, eid, true, func() { - }, func(eid string, b []byte) error { - return nil - }) + waitForEvent(t, con, eid, true, func() {}, doNothing) mempoolCount = 0 // run a call through the contract @@ -192,6 +188,7 @@ func testCall(t *testing.T, typ string) { } func testNameReg(t *testing.T, typ string) { + client := clients[typ] con := newWSCon(t) eid := types.EventStringNewBlock() subscribe(t, con, eid) @@ -200,23 +197,39 @@ func testNameReg(t *testing.T, typ string) { con.Close() }() + // register a new name, check if its there amt, fee := uint64(6969), uint64(1000) // since entries ought to be unique and these run against different clients, we append the typ - name := "ye-old-domain-name-" + typ - data := "these are amongst the things I wish to bestow upon the youth of generations come: a safe supply of honey, and a better money. For what else shall they need?" + name := "ye_old_domain_name_" + typ + data := "these are amongst the things I wish to bestow upon the youth of generations come: a safe supply of honey, and a better money. For what else shall they need" + tx := makeDefaultNameTx(t, typ, name, data, amt, fee) broadcastTx(t, typ, tx) - - // allow it to get mined - waitForEvent(t, con, eid, true, func() { - }, func(eid string, b []byte) error { - return nil - }) - + waitForEvent(t, con, eid, true, func() {}, doNothing) + mempoolCount = 0 entry := getNameRegEntry(t, typ, name) + if entry.Data != data { + t.Fatal(fmt.Sprintf("Got %s, expected %s", entry.Data, data)) + } + // update the data as the owner, make sure still there + data = "if not now, when" + tx = makeDefaultNameTx(t, typ, name, data, amt, fee) + broadcastTx(t, typ, tx) + waitForEvent(t, con, eid, true, func() {}, doNothing) + mempoolCount = 0 + entry = getNameRegEntry(t, typ, name) if entry.Data != data { t.Fatal(fmt.Sprintf("Got %s, expected %s", entry.Data, data)) } + // try to update as non owner, should fail + nonce := getNonce(t, typ, user[1].Address) + data2 := "this is not my beautiful house" + tx = types.NewNameTxWithNonce(user[1].PubKey, name, data2, amt, fee, nonce) + tx.Sign(user[1]) + _, err := client.BroadcastTx(tx) + if err == nil { + t.Fatal("Expected error on NameTx") + } } diff --git a/state/execution.go b/state/execution.go index dab938f39..73b4c62b5 100644 --- a/state/execution.go +++ b/state/execution.go @@ -527,7 +527,7 @@ func ExecTx(blockCache *BlockCache, tx_ types.Tx, runCall bool, evc events.Firea // ensure we are owner if bytes.Compare(entry.Owner, tx.Input.Address) != 0 { log.Debug(Fmt("Sender %X is trying to update a name (%s) for which he is not owner", tx.Input.Address, tx.Name)) - return types.ErrTxInvalidAddress // (?) + return types.ErrIncorrectOwner } } else { expired = true diff --git a/types/tx.go b/types/tx.go index 15a61cf89..0799b770a 100644 --- a/types/tx.go +++ b/types/tx.go @@ -20,6 +20,7 @@ var ( ErrTxInvalidPubKey = errors.New("Error invalid pubkey") ErrTxInvalidSignature = errors.New("Error invalid signature") ErrTxInvalidString = errors.New("Error invalid string") + ErrIncorrectOwner = errors.New("Error incorrect owner") ) type ErrTxInvalidSequence struct {