forked from cerc-io/laconicd-deprecated
		
	simplified sig verification, started handler tests
This commit is contained in:
		
							parent
							
								
									c1e6f3ea94
								
							
						
					
					
						commit
						e114ec508e
					
				
							
								
								
									
										128
									
								
								Gopkg.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										128
									
								
								Gopkg.lock
									
									
									
										generated
									
									
									
								
							| @ -3,29 +3,22 @@ | |||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   branch = "master" |   branch = "master" | ||||||
|   digest = "1:fcdf62d2d7e43c2565d6f8707ab4eae54dac702ed4bafb194b85139f0508929f" |  | ||||||
|   name = "github.com/aristanetworks/goarista" |   name = "github.com/aristanetworks/goarista" | ||||||
|   packages = ["monotime"] |   packages = ["monotime"] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "b2d71c282dc706f4b4f6c15b65810e1202ecd53f" |   revision = "b2d71c282dc706f4b4f6c15b65810e1202ecd53f" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   branch = "master" |   branch = "master" | ||||||
|   digest = "1:d4d66abd43dbb9b5f5e6a176c5ed279c289f8db734904c047d95113a04aa2e60" |  | ||||||
|   name = "github.com/btcsuite/btcd" |   name = "github.com/btcsuite/btcd" | ||||||
|   packages = ["btcec"] |   packages = ["btcec"] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "cf05f92c3f815bbd5091ed6c73eff51f7b1945e8" |   revision = "cf05f92c3f815bbd5091ed6c73eff51f7b1945e8" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:d0d998526cfb68788229a31c16a557fdf1fbbb510654be6b3732c2758e06b533" |  | ||||||
|   name = "github.com/btcsuite/btcutil" |   name = "github.com/btcsuite/btcutil" | ||||||
|   packages = ["bech32"] |   packages = ["bech32"] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "d4cc87b860166d00d6b5b9e0d3b3d71d6088d4d4" |   revision = "d4cc87b860166d00d6b5b9e0d3b3d71d6088d4d4" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:36773b598dec105de46a87978ae14e64c8d2c45aa556b8e0ddfc62d6abc7c47e" |  | ||||||
|   name = "github.com/cosmos/cosmos-sdk" |   name = "github.com/cosmos/cosmos-sdk" | ||||||
|   packages = [ |   packages = [ | ||||||
|     "baseapp", |     "baseapp", | ||||||
| @ -33,30 +26,24 @@ | |||||||
|     "types", |     "types", | ||||||
|     "version", |     "version", | ||||||
|     "wire", |     "wire", | ||||||
|     "x/auth", |     "x/auth" | ||||||
|   ] |   ] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "23e3d5ac12145c02fcb4b4767d7dfccad782aee5" |   revision = "23e3d5ac12145c02fcb4b4767d7dfccad782aee5" | ||||||
|   version = "v0.23.1" |   version = "v0.23.1" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:52f195ad0e20a92d8604c1ba3cd246c61644c03eaa454b5acd41be89841e0d10" |  | ||||||
|   name = "github.com/davecgh/go-spew" |   name = "github.com/davecgh/go-spew" | ||||||
|   packages = ["spew"] |   packages = ["spew"] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "346938d642f2ec3594ed81d874461961cd0faa76" |   revision = "346938d642f2ec3594ed81d874461961cd0faa76" | ||||||
|   version = "v1.1.0" |   version = "v1.1.0" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   branch = "master" |   branch = "master" | ||||||
|   digest = "1:67d0b50be0549e610017cb91e0b0b745ec0cad7c613bc8e18ff2d1c1fc8825a7" |  | ||||||
|   name = "github.com/edsrzf/mmap-go" |   name = "github.com/edsrzf/mmap-go" | ||||||
|   packages = ["."] |   packages = ["."] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "0bce6a6887123b67a60366d2c9fe2dfb74289d2e" |   revision = "0bce6a6887123b67a60366d2c9fe2dfb74289d2e" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:3238a0c355a81640974751f7d3bab21bf91035165f75c2c457959425c0422a4b" |  | ||||||
|   name = "github.com/ethereum/go-ethereum" |   name = "github.com/ethereum/go-ethereum" | ||||||
|   packages = [ |   packages = [ | ||||||
|     "common", |     "common", | ||||||
| @ -86,42 +73,34 @@ | |||||||
|     "params", |     "params", | ||||||
|     "rlp", |     "rlp", | ||||||
|     "rpc", |     "rpc", | ||||||
|     "trie", |     "trie" | ||||||
|   ] |   ] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "dea1ce052a10cd7d401a5c04f83f371a06fe293c" |   revision = "dea1ce052a10cd7d401a5c04f83f371a06fe293c" | ||||||
|   version = "v1.8.11" |   version = "v1.8.11" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:0b9c3ad6c948d57a379da9c4e1cdd989b1c73ddc5ec8673f52a9539ce60a109b" |  | ||||||
|   name = "github.com/go-kit/kit" |   name = "github.com/go-kit/kit" | ||||||
|   packages = [ |   packages = [ | ||||||
|     "log", |     "log", | ||||||
|     "log/level", |     "log/level", | ||||||
|     "log/term", |     "log/term" | ||||||
|   ] |   ] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "4dc7be5d2d12881735283bcab7352178e190fc71" |   revision = "4dc7be5d2d12881735283bcab7352178e190fc71" | ||||||
|   version = "v0.6.0" |   version = "v0.6.0" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:31a18dae27a29aa074515e43a443abfd2ba6deb6d69309d8d7ce789c45f34659" |  | ||||||
|   name = "github.com/go-logfmt/logfmt" |   name = "github.com/go-logfmt/logfmt" | ||||||
|   packages = ["."] |   packages = ["."] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "390ab7935ee28ec6b286364bba9b4dd6410cb3d5" |   revision = "390ab7935ee28ec6b286364bba9b4dd6410cb3d5" | ||||||
|   version = "v0.3.0" |   version = "v0.3.0" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:c4a2528ccbcabf90f9f3c464a5fc9e302d592861bbfd0b7135a7de8a943d0406" |  | ||||||
|   name = "github.com/go-stack/stack" |   name = "github.com/go-stack/stack" | ||||||
|   packages = ["."] |   packages = ["."] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "259ab82a6cad3992b4e21ff5cac294ccb06474bc" |   revision = "259ab82a6cad3992b4e21ff5cac294ccb06474bc" | ||||||
|   version = "v1.7.0" |   version = "v1.7.0" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:da39f4a22829ca95e63566208e0ea42d6f055f41dff1b14fdab88d88f62df653" |  | ||||||
|   name = "github.com/gogo/protobuf" |   name = "github.com/gogo/protobuf" | ||||||
|   packages = [ |   packages = [ | ||||||
|     "gogoproto", |     "gogoproto", | ||||||
| @ -129,122 +108,96 @@ | |||||||
|     "proto", |     "proto", | ||||||
|     "protoc-gen-gogo/descriptor", |     "protoc-gen-gogo/descriptor", | ||||||
|     "sortkeys", |     "sortkeys", | ||||||
|     "types", |     "types" | ||||||
|   ] |   ] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "636bf0302bc95575d69441b25a2603156ffdddf1" |   revision = "636bf0302bc95575d69441b25a2603156ffdddf1" | ||||||
|   version = "v1.1.1" |   version = "v1.1.1" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:832e17df5ff8bbe0e0693d2fb46c5e53f96c662ee804049ce3ab6557df74e3ab" |  | ||||||
|   name = "github.com/golang/protobuf" |   name = "github.com/golang/protobuf" | ||||||
|   packages = [ |   packages = [ | ||||||
|     "proto", |     "proto", | ||||||
|     "ptypes", |     "ptypes", | ||||||
|     "ptypes/any", |     "ptypes/any", | ||||||
|     "ptypes/duration", |     "ptypes/duration", | ||||||
|     "ptypes/timestamp", |     "ptypes/timestamp" | ||||||
|   ] |   ] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265" |   revision = "b4deda0973fb4c70b50d226b1af49f3da59f5265" | ||||||
|   version = "v1.1.0" |   version = "v1.1.0" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   branch = "master" |   branch = "master" | ||||||
|   digest = "1:6027b20c168728321bd99ad01f35118eded457b01c03e647a84833ab331f2f5b" |  | ||||||
|   name = "github.com/golang/snappy" |   name = "github.com/golang/snappy" | ||||||
|   packages = ["."] |   packages = ["."] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "2e65f85255dbc3072edf28d6b5b8efc472979f5a" |   revision = "2e65f85255dbc3072edf28d6b5b8efc472979f5a" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:cf296baa185baae04a9a7004efee8511d08e2f5f51d4cbe5375da89722d681db" |  | ||||||
|   name = "github.com/hashicorp/golang-lru" |   name = "github.com/hashicorp/golang-lru" | ||||||
|   packages = [ |   packages = [ | ||||||
|     ".", |     ".", | ||||||
|     "simplelru", |     "simplelru" | ||||||
|   ] |   ] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "0fb14efe8c47ae851c0034ed7a448854d3d34cf3" |   revision = "0fb14efe8c47ae851c0034ed7a448854d3d34cf3" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:870d441fe217b8e689d7949fef6e43efbc787e50f200cb1e70dbca9204a1d6be" |  | ||||||
|   name = "github.com/inconshreveable/mousetrap" |   name = "github.com/inconshreveable/mousetrap" | ||||||
|   packages = ["."] |   packages = ["."] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75" |   revision = "76626ae9c91c4f2a10f34cad8ce83ea42c93bb75" | ||||||
|   version = "v1.0" |   version = "v1.0" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   branch = "master" |   branch = "master" | ||||||
|   digest = "1:dc6b1a6801b3055e9bd3da4cd1e568606eb48118cc6f28e947783aa5d998ad74" |  | ||||||
|   name = "github.com/jmhodges/levigo" |   name = "github.com/jmhodges/levigo" | ||||||
|   packages = ["."] |   packages = ["."] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "c42d9e0ca023e2198120196f842701bb4c55d7b9" |   revision = "c42d9e0ca023e2198120196f842701bb4c55d7b9" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   branch = "master" |   branch = "master" | ||||||
|   digest = "1:a64e323dc06b73892e5bb5d040ced475c4645d456038333883f58934abbf6f72" |  | ||||||
|   name = "github.com/kr/logfmt" |   name = "github.com/kr/logfmt" | ||||||
|   packages = ["."] |   packages = ["."] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "b84e30acd515aadc4b783ad4ff83aff3299bdfe0" |   revision = "b84e30acd515aadc4b783ad4ff83aff3299bdfe0" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:40e195917a951a8bf867cd05de2a46aaf1806c50cf92eebf4c16f78cd196f747" |  | ||||||
|   name = "github.com/pkg/errors" |   name = "github.com/pkg/errors" | ||||||
|   packages = ["."] |   packages = ["."] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "645ef00459ed84a119197bfb8d8205042c6df63d" |   revision = "645ef00459ed84a119197bfb8d8205042c6df63d" | ||||||
|   version = "v0.8.0" |   version = "v0.8.0" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:22aa691fe0213cb5c07d103f9effebcb7ad04bee45a0ce5fe5369d0ca2ec3a1f" |  | ||||||
|   name = "github.com/pmezard/go-difflib" |   name = "github.com/pmezard/go-difflib" | ||||||
|   packages = ["difflib"] |   packages = ["difflib"] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "792786c7400a136282c1664665ae0a8db921c6c2" |   revision = "792786c7400a136282c1664665ae0a8db921c6c2" | ||||||
|   version = "v1.0.0" |   version = "v1.0.0" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:6cae6970d70fc5fe75bf83c48ee33e9c4c561a62d0b033254bee8dd5942b815a" |  | ||||||
|   name = "github.com/rs/cors" |   name = "github.com/rs/cors" | ||||||
|   packages = ["."] |   packages = ["."] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "3fb1b69b103a84de38a19c3c6ec073dd6caa4d3f" |   revision = "3fb1b69b103a84de38a19c3c6ec073dd6caa4d3f" | ||||||
|   version = "v1.5.0" |   version = "v1.5.0" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:8be8b3743fc9795ec21bbd3e0fc28ff6234018e1a269b0a7064184be95ac13e0" |  | ||||||
|   name = "github.com/spf13/cobra" |   name = "github.com/spf13/cobra" | ||||||
|   packages = ["."] |   packages = ["."] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "ef82de70bb3f60c65fb8eebacbb2d122ef517385" |   revision = "ef82de70bb3f60c65fb8eebacbb2d122ef517385" | ||||||
|   version = "v0.0.3" |   version = "v0.0.3" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:6de2f73eb31e80d74f84ce1c861e4c0c8f00ca5fb41a25901f987e63a0647c28" |  | ||||||
|   name = "github.com/spf13/pflag" |   name = "github.com/spf13/pflag" | ||||||
|   packages = ["."] |   packages = ["."] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "583c0c0531f06d5278b7d917446061adc344b5cd" |   revision = "583c0c0531f06d5278b7d917446061adc344b5cd" | ||||||
|   version = "v1.0.1" |   version = "v1.0.1" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:e95496462101745805bd4e041a5b841e108c7cf761264d53648246308de2761e" |  | ||||||
|   name = "github.com/stretchr/testify" |   name = "github.com/stretchr/testify" | ||||||
|   packages = [ |   packages = [ | ||||||
|     "assert", |     "assert", | ||||||
|     "require", |     "require" | ||||||
|   ] |   ] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "f35b8ab0b5a2cef36673838d662e249dd9c94686" |   revision = "f35b8ab0b5a2cef36673838d662e249dd9c94686" | ||||||
|   version = "v1.2.2" |   version = "v1.2.2" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   branch = "master" |   branch = "master" | ||||||
|   digest = "1:7d44c4d11eb65cfdc78c76040f37ef305b16474c019c98a8a7cf188fece2d574" |  | ||||||
|   name = "github.com/syndtr/goleveldb" |   name = "github.com/syndtr/goleveldb" | ||||||
|   packages = [ |   packages = [ | ||||||
|     "leveldb", |     "leveldb", | ||||||
| @ -258,41 +211,33 @@ | |||||||
|     "leveldb/opt", |     "leveldb/opt", | ||||||
|     "leveldb/storage", |     "leveldb/storage", | ||||||
|     "leveldb/table", |     "leveldb/table", | ||||||
|     "leveldb/util", |     "leveldb/util" | ||||||
|   ] |   ] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "c4c61651e9e37fa117f53c5a906d3b63090d8445" |   revision = "c4c61651e9e37fa117f53c5a906d3b63090d8445" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   branch = "master" |   branch = "master" | ||||||
|   digest = "1:2b15c0442dc80b581ce7028b2e43029d2f3f985da43cb1d55f7bcdeca785bda0" |  | ||||||
|   name = "github.com/tendermint/ed25519" |   name = "github.com/tendermint/ed25519" | ||||||
|   packages = [ |   packages = [ | ||||||
|     ".", |     ".", | ||||||
|     "edwards25519", |     "edwards25519", | ||||||
|     "extra25519", |     "extra25519" | ||||||
|   ] |   ] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "d8387025d2b9d158cf4efb07e7ebf814bcce2057" |   revision = "d8387025d2b9d158cf4efb07e7ebf814bcce2057" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:0e2addab3f64ece97ca434b2bf2d4e8cb54a4509904a03be8c81da3fc2ddb245" |  | ||||||
|   name = "github.com/tendermint/go-amino" |   name = "github.com/tendermint/go-amino" | ||||||
|   packages = ["."] |   packages = ["."] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "2106ca61d91029c931fd54968c2bb02dc96b1412" |   revision = "2106ca61d91029c931fd54968c2bb02dc96b1412" | ||||||
|   version = "0.10.1" |   version = "0.10.1" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:bf042d2f7d1252b9dcae8e694e2f0a9b5294cb357c086fd86dc540d2f32c9fdf" |  | ||||||
|   name = "github.com/tendermint/iavl" |   name = "github.com/tendermint/iavl" | ||||||
|   packages = ["."] |   packages = ["."] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "35f66e53d9b01e83b30de68b931f54b2477a94c9" |   revision = "35f66e53d9b01e83b30de68b931f54b2477a94c9" | ||||||
|   version = "v0.9.2" |   version = "v0.9.2" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:9f6704ae2aedbadf616e5850375c504909d46b6ea57d4679de2b7cbc715f08e1" |  | ||||||
|   name = "github.com/tendermint/tendermint" |   name = "github.com/tendermint/tendermint" | ||||||
|   packages = [ |   packages = [ | ||||||
|     "abci/server", |     "abci/server", | ||||||
| @ -309,22 +254,18 @@ | |||||||
|     "libs/log", |     "libs/log", | ||||||
|     "libs/pubsub", |     "libs/pubsub", | ||||||
|     "libs/pubsub/query", |     "libs/pubsub/query", | ||||||
|     "types", |     "types" | ||||||
|   ] |   ] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "d542d2c3945116697f60451e6a407082c41c3cc9" |   revision = "d542d2c3945116697f60451e6a407082c41c3cc9" | ||||||
|   version = "v0.22.8" |   version = "v0.22.8" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   branch = "master" |   branch = "master" | ||||||
|   digest = "1:2cbe8758697d867fcebf73bcc69dff8e8abaa7fd65e5704e0744e522ccff4e6a" |  | ||||||
|   name = "golang.org/x/crypto" |   name = "golang.org/x/crypto" | ||||||
|   packages = ["ripemd160"] |   packages = ["ripemd160"] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "f027049dab0ad238e394a753dba2d14753473a04" |   revision = "f027049dab0ad238e394a753dba2d14753473a04" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:5fdc7adede42f80d6201258355d478d856778e21d735f14972abd8ff793fdbf7" |  | ||||||
|   name = "golang.org/x/net" |   name = "golang.org/x/net" | ||||||
|   packages = [ |   packages = [ | ||||||
|     "context", |     "context", | ||||||
| @ -334,13 +275,11 @@ | |||||||
|     "idna", |     "idna", | ||||||
|     "internal/timeseries", |     "internal/timeseries", | ||||||
|     "trace", |     "trace", | ||||||
|     "websocket", |     "websocket" | ||||||
|   ] |   ] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "292b43bbf7cb8d35ddf40f8d5100ef3837cced3f" |   revision = "292b43bbf7cb8d35ddf40f8d5100ef3837cced3f" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:6164911cb5e94e8d8d5131d646613ff82c14f5a8ce869de2f6d80d9889df8c5a" |  | ||||||
|   name = "golang.org/x/text" |   name = "golang.org/x/text" | ||||||
|   packages = [ |   packages = [ | ||||||
|     "collate", |     "collate", | ||||||
| @ -356,21 +295,17 @@ | |||||||
|     "unicode/bidi", |     "unicode/bidi", | ||||||
|     "unicode/cldr", |     "unicode/cldr", | ||||||
|     "unicode/norm", |     "unicode/norm", | ||||||
|     "unicode/rangetable", |     "unicode/rangetable" | ||||||
|   ] |   ] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" |   revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0" | ||||||
|   version = "v0.3.0" |   version = "v0.3.0" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:8cfa91d1b7f6b66fa9b1a738a4bc1325837b861e63fb9a2919931d68871bb770" |  | ||||||
|   name = "google.golang.org/genproto" |   name = "google.golang.org/genproto" | ||||||
|   packages = ["googleapis/rpc/status"] |   packages = ["googleapis/rpc/status"] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "7fd901a49ba6a7f87732eb344f6e3c5b19d1b200" |   revision = "7fd901a49ba6a7f87732eb344f6e3c5b19d1b200" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:adafc60b1d4688759f3fc8f9089e71dd17abd123f4729de6b913bf08c9143770" |  | ||||||
|   name = "google.golang.org/grpc" |   name = "google.golang.org/grpc" | ||||||
|   packages = [ |   packages = [ | ||||||
|     ".", |     ".", | ||||||
| @ -397,67 +332,32 @@ | |||||||
|     "stats", |     "stats", | ||||||
|     "status", |     "status", | ||||||
|     "tap", |     "tap", | ||||||
|     "transport", |     "transport" | ||||||
|   ] |   ] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "168a6198bcb0ef175f7dacec0b8691fc141dc9b8" |   revision = "168a6198bcb0ef175f7dacec0b8691fc141dc9b8" | ||||||
|   version = "v1.13.0" |   version = "v1.13.0" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   digest = "1:3ccd10c863188cfe0d936fcfe6a055c95362e43af8e7039e33baade846928e74" |  | ||||||
|   name = "gopkg.in/fatih/set.v0" |   name = "gopkg.in/fatih/set.v0" | ||||||
|   packages = ["."] |   packages = ["."] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "57907de300222151a123d29255ed17f5ed43fad3" |   revision = "57907de300222151a123d29255ed17f5ed43fad3" | ||||||
|   version = "v0.1.0" |   version = "v0.1.0" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   branch = "v2" |   branch = "v2" | ||||||
|   digest = "1:dae137be246befa42ce4b48c0feff2c5796b8a5027139a283f31a21173744410" |  | ||||||
|   name = "gopkg.in/karalabe/cookiejar.v2" |   name = "gopkg.in/karalabe/cookiejar.v2" | ||||||
|   packages = ["collections/prque"] |   packages = ["collections/prque"] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "8dcd6a7f4951f6ff3ee9cbb919a06d8925822e57" |   revision = "8dcd6a7f4951f6ff3ee9cbb919a06d8925822e57" | ||||||
| 
 | 
 | ||||||
| [[projects]] | [[projects]] | ||||||
|   branch = "v2" |   branch = "v2" | ||||||
|   digest = "1:3d3f9391ab615be8655ae0d686a1564f3fec413979bb1aaf018bac1ec1bb1cc7" |  | ||||||
|   name = "gopkg.in/natefinch/npipe.v2" |   name = "gopkg.in/natefinch/npipe.v2" | ||||||
|   packages = ["."] |   packages = ["."] | ||||||
|   pruneopts = "T" |  | ||||||
|   revision = "c1b8fa8bdccecb0b8db834ee0b92fdbcfa606dd6" |   revision = "c1b8fa8bdccecb0b8db834ee0b92fdbcfa606dd6" | ||||||
| 
 | 
 | ||||||
| [solve-meta] | [solve-meta] | ||||||
|   analyzer-name = "dep" |   analyzer-name = "dep" | ||||||
|   analyzer-version = 1 |   analyzer-version = 1 | ||||||
|   input-imports = [ |   inputs-digest = "560c44b5e8f495ae409bc13b0e32cf36e3281f0d02b68b15e987faa2cda1e91c" | ||||||
|     "github.com/cosmos/cosmos-sdk/baseapp", |  | ||||||
|     "github.com/cosmos/cosmos-sdk/store", |  | ||||||
|     "github.com/cosmos/cosmos-sdk/types", |  | ||||||
|     "github.com/cosmos/cosmos-sdk/wire", |  | ||||||
|     "github.com/cosmos/cosmos-sdk/x/auth", |  | ||||||
|     "github.com/ethereum/go-ethereum/common", |  | ||||||
|     "github.com/ethereum/go-ethereum/common/math", |  | ||||||
|     "github.com/ethereum/go-ethereum/consensus", |  | ||||||
|     "github.com/ethereum/go-ethereum/consensus/ethash", |  | ||||||
|     "github.com/ethereum/go-ethereum/consensus/misc", |  | ||||||
|     "github.com/ethereum/go-ethereum/core", |  | ||||||
|     "github.com/ethereum/go-ethereum/core/state", |  | ||||||
|     "github.com/ethereum/go-ethereum/core/types", |  | ||||||
|     "github.com/ethereum/go-ethereum/core/vm", |  | ||||||
|     "github.com/ethereum/go-ethereum/crypto", |  | ||||||
|     "github.com/ethereum/go-ethereum/crypto/sha3", |  | ||||||
|     "github.com/ethereum/go-ethereum/ethdb", |  | ||||||
|     "github.com/ethereum/go-ethereum/params", |  | ||||||
|     "github.com/ethereum/go-ethereum/rlp", |  | ||||||
|     "github.com/ethereum/go-ethereum/rpc", |  | ||||||
|     "github.com/ethereum/go-ethereum/trie", |  | ||||||
|     "github.com/hashicorp/golang-lru", |  | ||||||
|     "github.com/pkg/errors", |  | ||||||
|     "github.com/stretchr/testify/require", |  | ||||||
|     "github.com/tendermint/tendermint/libs/common", |  | ||||||
|     "github.com/tendermint/tendermint/libs/db", |  | ||||||
|     "github.com/tendermint/tendermint/libs/log", |  | ||||||
|   ] |  | ||||||
|   solver-name = "gps-cdcl" |   solver-name = "gps-cdcl" | ||||||
|   solver-version = 1 |   solver-version = 1 | ||||||
|  | |||||||
| @ -9,8 +9,6 @@ import ( | |||||||
| 
 | 
 | ||||||
| 	"github.com/cosmos/ethermint/types" | 	"github.com/cosmos/ethermint/types" | ||||||
| 	ethcmn "github.com/ethereum/go-ethereum/common" | 	ethcmn "github.com/ethereum/go-ethereum/common" | ||||||
| 
 |  | ||||||
| 	ethtypes "github.com/ethereum/go-ethereum/core/types" |  | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| const ( | const ( | ||||||
| @ -93,10 +91,9 @@ func handleEthTx(sdkCtx sdk.Context, tx sdk.Tx, am auth.AccountMapper) (sdk.Cont | |||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// validate signature
 | 	// validate signature
 | ||||||
| 	gethTx := ethTx.ConvertTx(chainID) | 	sdkCtx.GasMeter().ConsumeGas(verifySigCost, "ante verify") | ||||||
| 	signer := ethtypes.NewEIP155Signer(chainID) | 	_, err := ethTx.VerifySig(chainID) | ||||||
| 
 | 
 | ||||||
| 	_, err := signer.Sender(&gethTx) |  | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return sdkCtx, sdk.ErrUnauthorized("signature verification failed").Result(), true | 		return sdkCtx, sdk.ErrUnauthorized("signature verification failed").Result(), true | ||||||
| 	} | 	} | ||||||
| @ -125,7 +122,7 @@ func handleEmbeddedTx(sdkCtx sdk.Context, tx sdk.Tx, am auth.AccountMapper) (sdk | |||||||
| 
 | 
 | ||||||
| 		signerAcc, err := validateSignature(sdkCtx, etx, signer, sig, am) | 		signerAcc, err := validateSignature(sdkCtx, etx, signer, sig, am) | ||||||
| 		if err.Code() != sdk.CodeOK { | 		if err.Code() != sdk.CodeOK { | ||||||
| 			return sdkCtx, err.Result(), false | 			return sdkCtx, err.Result(), true | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// TODO: Fees!
 | 		// TODO: Fees!
 | ||||||
|  | |||||||
							
								
								
									
										70
									
								
								handlers/ante_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								handlers/ante_test.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,70 @@ | |||||||
|  | package handlers | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"testing" | ||||||
|  | 	"math/big" | ||||||
|  | 	"crypto/ecdsa" | ||||||
|  | 
 | ||||||
|  | 	"github.com/cosmos/ethermint/types" | ||||||
|  | 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||||
|  | 	"github.com/cosmos/cosmos-sdk/x/auth" | ||||||
|  | 	abci "github.com/tendermint/tendermint/abci/types" | ||||||
|  | 
 | ||||||
|  | 	ethcmn "github.com/ethereum/go-ethereum/common" | ||||||
|  | 
 | ||||||
|  | 	"github.com/stretchr/testify/require" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func TestBadSig(t *testing.T) { | ||||||
|  | 	tx := types.NewTestEthTxs(types.TestChainID, []*ecdsa.PrivateKey{types.TestPrivKey1}, []ethcmn.Address{types.TestAddr1})[0] | ||||||
|  | 
 | ||||||
|  | 	tx.Data.Signature = types.NewEthSignature(new(big.Int), new(big.Int), new(big.Int)) | ||||||
|  | 
 | ||||||
|  | 	ms, key := SetupMultiStore() | ||||||
|  | 	ctx := sdk.NewContext(ms, abci.Header{ChainID: types.TestChainID.String()}, false, nil) | ||||||
|  | 
 | ||||||
|  | 	accountMapper := auth.NewAccountMapper(types.NewTestCodec(), key, auth.ProtoBaseAccount) | ||||||
|  | 	handler := AnteHandler(accountMapper) | ||||||
|  | 
 | ||||||
|  | 	_, res, abort := handler(ctx, tx) | ||||||
|  | 
 | ||||||
|  | 	require.True(t, abort, "Antehandler did not abort") | ||||||
|  | 	require.Equal(t, sdk.ABCICodeType(0x10004), res.Code, "Result is OK on bad tx") | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func TestInsufficientGas(t *testing.T) { | ||||||
|  | 	tx := types.NewTestEthTxs(types.TestChainID, []*ecdsa.PrivateKey{types.TestPrivKey1}, []ethcmn.Address{types.TestAddr1})[0] | ||||||
|  | 
 | ||||||
|  | 	tx.Data.GasLimit = 0 | ||||||
|  | 
 | ||||||
|  | 	ms, key := SetupMultiStore() | ||||||
|  | 	ctx := sdk.NewContext(ms, abci.Header{ChainID: types.TestChainID.String()}, false, nil) | ||||||
|  | 
 | ||||||
|  | 	accountMapper := auth.NewAccountMapper(types.NewTestCodec(), key, auth.ProtoBaseAccount) | ||||||
|  | 	handler := AnteHandler(accountMapper) | ||||||
|  | 
 | ||||||
|  | 	_, res, abort := handler(ctx, tx) | ||||||
|  | 
 | ||||||
|  | 	require.True(t, abort, "Antehandler did not abort") | ||||||
|  | 	require.Equal(t, sdk.ABCICodeType(0x1000c), res.Code, "Result is OK on bad tx") | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func TestWrongNonce(t *testing.T) { | ||||||
|  | 	tx := types.NewTestEthTxs(types.TestChainID, []*ecdsa.PrivateKey{types.TestPrivKey1}, []ethcmn.Address{types.TestAddr1})[0] | ||||||
|  | 
 | ||||||
|  | 	tx.Data.AccountNonce = 12 | ||||||
|  | 
 | ||||||
|  | 	ms, key := SetupMultiStore() | ||||||
|  | 	ctx := sdk.NewContext(ms, abci.Header{ChainID: types.TestChainID.String()}, false, nil) | ||||||
|  | 
 | ||||||
|  | 	accountMapper := auth.NewAccountMapper(types.NewTestCodec(), key, auth.ProtoBaseAccount) | ||||||
|  | 	handler := AnteHandler(accountMapper) | ||||||
|  | 
 | ||||||
|  | 	_, res, abort := handler(ctx, tx) | ||||||
|  | 
 | ||||||
|  | 	require.True(t, abort, "Antehandler did not abort") | ||||||
|  | 	require.Equal(t, sdk.ABCICodeType(0x10004), res.Code, "Result is OK on bad tx") | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										16
									
								
								handlers/test_common.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								handlers/test_common.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | package handlers | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"github.com/cosmos/cosmos-sdk/store" | ||||||
|  | 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||||
|  | 	dbm "github.com/tendermint/tendermint/libs/db" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func SetupMultiStore() (sdk.MultiStore, *sdk.KVStoreKey) { | ||||||
|  | 	db := dbm.NewMemDB() | ||||||
|  | 	capKey := sdk.NewKVStoreKey("capkey") | ||||||
|  | 	ms := store.NewCommitMultiStore(db) | ||||||
|  | 	ms.MountStoreWithDB(capKey, sdk.StoreTypeIAVL, db) | ||||||
|  | 	ms.LoadLatestVersion() | ||||||
|  | 	return ms, capKey | ||||||
|  | } | ||||||
							
								
								
									
										122
									
								
								types/test_common.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								types/test_common.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,122 @@ | |||||||
|  | package types | ||||||
|  | 
 | ||||||
|  | import ( | ||||||
|  | 	"crypto/ecdsa" | ||||||
|  | 	"math/big" | ||||||
|  | 
 | ||||||
|  | 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||||
|  | 	"github.com/cosmos/cosmos-sdk/wire" | ||||||
|  | 	"github.com/cosmos/cosmos-sdk/x/auth" | ||||||
|  | 
 | ||||||
|  | 	ethcrypto "github.com/ethereum/go-ethereum/crypto" | ||||||
|  | 	ethtypes "github.com/ethereum/go-ethereum/core/types" | ||||||
|  | 	ethcmn "github.com/ethereum/go-ethereum/common" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | var ( | ||||||
|  | 	TestChainID = sdk.NewInt(3) | ||||||
|  | 
 | ||||||
|  | 	TestPrivKey1, _ = ethcrypto.GenerateKey() | ||||||
|  | 	TestPrivKey2, _ = ethcrypto.GenerateKey() | ||||||
|  | 
 | ||||||
|  | 	TestAddr1 = PrivKeyToEthAddress(TestPrivKey1) | ||||||
|  | 	TestAddr2 = PrivKeyToEthAddress(TestPrivKey2) | ||||||
|  | 
 | ||||||
|  | 	TestSDKAddress = GenerateEthAddress() | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func NewTestCodec() *wire.Codec { | ||||||
|  | 	codec := wire.NewCodec() | ||||||
|  | 
 | ||||||
|  | 	RegisterWire(codec) | ||||||
|  | 	codec.RegisterConcrete(&sdk.TestMsg{}, "test/TestMsg", nil) | ||||||
|  | 
 | ||||||
|  | 	return codec | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func newStdFee() auth.StdFee { | ||||||
|  | 	return auth.NewStdFee(5000, sdk.NewCoin("photon", 150)) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func newTestEmbeddedTx( | ||||||
|  | 	chainID sdk.Int, msgs []sdk.Msg, pKeys []*ecdsa.PrivateKey, | ||||||
|  | 	accNums []int64, seqs []int64, fee auth.StdFee, | ||||||
|  | ) sdk.Tx { | ||||||
|  | 
 | ||||||
|  | 	sigs := make([][]byte, len(pKeys)) | ||||||
|  | 
 | ||||||
|  | 	for i, priv := range pKeys { | ||||||
|  | 		signEtx := EmbeddedTxSign{chainID.String(), accNums[i], seqs[i], msgs, newStdFee()} | ||||||
|  | 
 | ||||||
|  | 		signBytes, err := signEtx.Bytes() | ||||||
|  | 		if err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		sig, err := ethcrypto.Sign(signBytes, priv) | ||||||
|  | 		if err != nil { | ||||||
|  | 			panic(err) | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		sigs[i] = sig | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return EmbeddedTx{msgs, fee, sigs} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewTestGethTxs(chainID sdk.Int, pKeys []*ecdsa.PrivateKey, addrs []ethcmn.Address) []ethtypes.Transaction { | ||||||
|  | 	txs := make([]ethtypes.Transaction, len(pKeys)) | ||||||
|  | 
 | ||||||
|  | 	for i, priv := range pKeys { | ||||||
|  | 		ethTx := ethtypes.NewTransaction( | ||||||
|  | 			uint64(i), addrs[i], big.NewInt(10), 100, big.NewInt(100), nil, | ||||||
|  | 		) | ||||||
|  | 
 | ||||||
|  | 		signer := ethtypes.NewEIP155Signer(chainID.BigInt()) | ||||||
|  | 		ethTx, _ = ethtypes.SignTx(ethTx, signer, priv) | ||||||
|  | 
 | ||||||
|  | 		txs[i] = *ethTx | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return txs | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewTestEthTxs(chainID sdk.Int, pKeys []*ecdsa.PrivateKey, addrs []ethcmn.Address) []Transaction { | ||||||
|  | 	txs := make([]Transaction, len(pKeys)) | ||||||
|  | 
 | ||||||
|  | 	for i, priv := range pKeys { | ||||||
|  | 		emintTx := NewTransaction( | ||||||
|  | 			uint64(i), addrs[i], sdk.NewInt(10), 100, sdk.NewInt(100), nil, | ||||||
|  | 		) | ||||||
|  | 
 | ||||||
|  | 		emintTx.Sign(chainID, priv) | ||||||
|  | 
 | ||||||
|  | 		txs[i] = emintTx | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return txs | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func NewTestSDKTxs( | ||||||
|  | 	codec *wire.Codec, chainID sdk.Int, msgs []sdk.Msg, pKeys []*ecdsa.PrivateKey, | ||||||
|  | 	accNums []int64, seqs []int64, fee auth.StdFee, | ||||||
|  | ) []Transaction { | ||||||
|  | 
 | ||||||
|  | 	txs := make([]Transaction, len(pKeys)) | ||||||
|  | 	etx := newTestEmbeddedTx(chainID, msgs, pKeys, accNums, seqs, fee) | ||||||
|  | 
 | ||||||
|  | 	for i, priv := range pKeys { | ||||||
|  | 		payload := codec.MustMarshalBinary(etx) | ||||||
|  | 
 | ||||||
|  | 		emintTx := NewTransaction( | ||||||
|  | 			uint64(i), TestSDKAddress, sdk.NewInt(10), 100, | ||||||
|  | 			sdk.NewInt(100), payload, | ||||||
|  | 		) | ||||||
|  | 
 | ||||||
|  | 		emintTx.Sign(TestChainID, priv) | ||||||
|  | 
 | ||||||
|  | 		txs[i] = emintTx | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return txs | ||||||
|  | } | ||||||
							
								
								
									
										78
									
								
								types/tx.go
									
									
									
									
									
								
							
							
						
						
									
										78
									
								
								types/tx.go
									
									
									
									
									
								
							| @ -68,6 +68,13 @@ type ( | |||||||
| 	EthSignature struct { | 	EthSignature struct { | ||||||
| 		v, r, s *big.Int | 		v, r, s *big.Int | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	// sigCache is used to cache the derived sender and contains
 | ||||||
|  | 	// the signer used to derive it.
 | ||||||
|  | 	sigCache struct { | ||||||
|  | 		signer ethtypes.Signer | ||||||
|  | 		from   ethcmn.Address | ||||||
|  | 	} | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| // NewEthSignature returns a new instantiated Ethereum signature.
 | // NewEthSignature returns a new instantiated Ethereum signature.
 | ||||||
| @ -164,6 +171,56 @@ func (tx *Transaction) Sign(chainID sdk.Int, priv *ecdsa.PrivateKey) { | |||||||
| 	tx.Data.Signature.s = s | 	tx.Data.Signature.s = s | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func (tx Transaction) VerifySig(chainID *big.Int) (ethcmn.Address, error) { | ||||||
|  | 	if sc := tx.from.Load(); sc != nil { | ||||||
|  | 		sigCache := sc.(sigCache) | ||||||
|  | 		// If the signer used to derive from in a previous
 | ||||||
|  | 		// call is not the same as used current, invalidate
 | ||||||
|  | 		// the cache.
 | ||||||
|  | 		if sigCache.signer.Equal(ethtypes.NewEIP155Signer(chainID)) { | ||||||
|  | 			return sigCache.from, nil | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	var signBytes ethcmn.Hash | ||||||
|  | 	if tx.Data.Signature.v.BitLen() < 8 { | ||||||
|  | 		v := tx.Data.Signature.v.Uint64() | ||||||
|  | 		if v == 27 || v == 28 { | ||||||
|  | 			// Unprotected tx has no cross-chain replay protection
 | ||||||
|  | 			signBytes = rlpHash([]interface{}{ | ||||||
|  | 				tx.Data.AccountNonce, | ||||||
|  | 				tx.Data.Price, | ||||||
|  | 				tx.Data.GasLimit, | ||||||
|  | 				tx.Data.Recipient, | ||||||
|  | 				tx.Data.Amount, | ||||||
|  | 				tx.Data.Payload, | ||||||
|  | 			}) | ||||||
|  | 		} | ||||||
|  | 	} else { | ||||||
|  | 		signBytes = rlpHash([]interface{}{ | ||||||
|  | 			tx.Data.AccountNonce, | ||||||
|  | 			tx.Data.Price, | ||||||
|  | 			tx.Data.GasLimit, | ||||||
|  | 			tx.Data.Recipient, | ||||||
|  | 			tx.Data.Amount, | ||||||
|  | 			tx.Data.Payload, | ||||||
|  | 			chainID, uint(0), uint(0), | ||||||
|  | 	}) | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	sig := recoverEthSig(tx.Data.Signature, chainID) | ||||||
|  | 
 | ||||||
|  | 	pub, err := ethcrypto.Ecrecover(signBytes[:], sig) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return ethcmn.Address{}, err | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	var addr ethcmn.Address | ||||||
|  | 	copy(addr[:], ethcrypto.Keccak256(pub[1:])[12:]) | ||||||
|  | 	return addr, nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // Type implements the sdk.Msg interface. It returns the type of the
 | // Type implements the sdk.Msg interface. It returns the type of the
 | ||||||
| // Transaction.
 | // Transaction.
 | ||||||
| func (tx Transaction) Type() string { | func (tx Transaction) Type() string { | ||||||
| @ -200,27 +257,6 @@ func (tx Transaction) GetMsgs() []sdk.Msg { | |||||||
| 	return []sdk.Msg{tx} | 	return []sdk.Msg{tx} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // ConvertTx attempts to converts a Transaction to a new Ethereum transaction
 |  | ||||||
| // with the signature set. The signature if first recovered and then a new
 |  | ||||||
| // Transaction is created with that signature. If setting the signature fails,
 |  | ||||||
| // a panic will be triggered.
 |  | ||||||
| func (tx Transaction) ConvertTx(chainID *big.Int) ethtypes.Transaction { |  | ||||||
| 	gethTx := ethtypes.NewTransaction( |  | ||||||
| 		tx.Data.AccountNonce, *tx.Data.Recipient, tx.Data.Amount.BigInt(), |  | ||||||
| 		tx.Data.GasLimit, tx.Data.Price.BigInt(), tx.Data.Payload, |  | ||||||
| 	) |  | ||||||
| 
 |  | ||||||
| 	sig := recoverEthSig(tx.Data.Signature, chainID) |  | ||||||
| 	signer := ethtypes.NewEIP155Signer(chainID) |  | ||||||
| 
 |  | ||||||
| 	gethTx, err := gethTx.WithSignature(signer, sig) |  | ||||||
| 	if err != nil { |  | ||||||
| 		panic(errors.Wrap(err, "failed to convert transaction with a given signature")) |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return *gethTx |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // HasEmbeddedTx returns a boolean reflecting if the transaction contains an
 | // HasEmbeddedTx returns a boolean reflecting if the transaction contains an
 | ||||||
| // SDK transaction or not based on the recipient address.
 | // SDK transaction or not based on the recipient address.
 | ||||||
| func (tx Transaction) HasEmbeddedTx(addr ethcmn.Address) bool { | func (tx Transaction) HasEmbeddedTx(addr ethcmn.Address) bool { | ||||||
|  | |||||||
							
								
								
									
										228
									
								
								types/tx_test.go
									
									
									
									
									
								
							
							
						
						
									
										228
									
								
								types/tx_test.go
									
									
									
									
									
								
							| @ -3,164 +3,18 @@ package types | |||||||
| import ( | import ( | ||||||
| 	"crypto/ecdsa" | 	"crypto/ecdsa" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"math/big" |  | ||||||
| 	"testing" | 	"testing" | ||||||
| 
 | 
 | ||||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||||
| 	"github.com/cosmos/cosmos-sdk/wire" |  | ||||||
| 	"github.com/cosmos/cosmos-sdk/x/auth" |  | ||||||
| 	ethcmn "github.com/ethereum/go-ethereum/common" | 	ethcmn "github.com/ethereum/go-ethereum/common" | ||||||
| 	ethtypes "github.com/ethereum/go-ethereum/core/types" |  | ||||||
| 	ethcrypto "github.com/ethereum/go-ethereum/crypto" |  | ||||||
| 	"github.com/stretchr/testify/require" | 	"github.com/stretchr/testify/require" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var ( |  | ||||||
| 	testChainID = sdk.NewInt(3) |  | ||||||
| 
 |  | ||||||
| 	testPrivKey1, _ = ethcrypto.GenerateKey() |  | ||||||
| 	testPrivKey2, _ = ethcrypto.GenerateKey() |  | ||||||
| 
 |  | ||||||
| 	testAddr1 = PrivKeyToEthAddress(testPrivKey1) |  | ||||||
| 	testAddr2 = PrivKeyToEthAddress(testPrivKey2) |  | ||||||
| 
 |  | ||||||
| 	testSDKAddress = GenerateEthAddress() |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| func newTestCodec() *wire.Codec { |  | ||||||
| 	codec := wire.NewCodec() |  | ||||||
| 
 |  | ||||||
| 	RegisterWire(codec) |  | ||||||
| 	codec.RegisterConcrete(&sdk.TestMsg{}, "test/TestMsg", nil) |  | ||||||
| 
 |  | ||||||
| 	return codec |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func newStdFee() auth.StdFee { |  | ||||||
| 	return auth.NewStdFee(5000, sdk.NewCoin("photon", 150)) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func newTestEmbeddedTx( |  | ||||||
| 	chainID sdk.Int, msgs []sdk.Msg, pKeys []*ecdsa.PrivateKey, |  | ||||||
| 	accNums []int64, seqs []int64, fee auth.StdFee, |  | ||||||
| ) sdk.Tx { |  | ||||||
| 
 |  | ||||||
| 	sigs := make([][]byte, len(pKeys)) |  | ||||||
| 
 |  | ||||||
| 	for i, priv := range pKeys { |  | ||||||
| 		signEtx := EmbeddedTxSign{chainID.String(), accNums[i], seqs[i], msgs, newStdFee()} |  | ||||||
| 
 |  | ||||||
| 		signBytes, err := signEtx.Bytes() |  | ||||||
| 		if err != nil { |  | ||||||
| 			panic(err) |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		sig, err := ethcrypto.Sign(signBytes, priv) |  | ||||||
| 		if err != nil { |  | ||||||
| 			panic(err) |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		sigs[i] = sig |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return EmbeddedTx{msgs, fee, sigs} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func newTestGethTxs(chainID sdk.Int, pKeys []*ecdsa.PrivateKey, addrs []ethcmn.Address) []ethtypes.Transaction { |  | ||||||
| 	txs := make([]ethtypes.Transaction, len(pKeys)) |  | ||||||
| 
 |  | ||||||
| 	for i, priv := range pKeys { |  | ||||||
| 		ethTx := ethtypes.NewTransaction( |  | ||||||
| 			uint64(i), addrs[i], big.NewInt(10), 100, big.NewInt(100), nil, |  | ||||||
| 		) |  | ||||||
| 
 |  | ||||||
| 		signer := ethtypes.NewEIP155Signer(chainID.BigInt()) |  | ||||||
| 		ethTx, _ = ethtypes.SignTx(ethTx, signer, priv) |  | ||||||
| 
 |  | ||||||
| 		txs[i] = *ethTx |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return txs |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func newTestEthTxs(chainID sdk.Int, pKeys []*ecdsa.PrivateKey, addrs []ethcmn.Address) []Transaction { |  | ||||||
| 	txs := make([]Transaction, len(pKeys)) |  | ||||||
| 
 |  | ||||||
| 	for i, priv := range pKeys { |  | ||||||
| 		emintTx := NewTransaction( |  | ||||||
| 			uint64(i), addrs[i], sdk.NewInt(10), 100, sdk.NewInt(100), nil, |  | ||||||
| 		) |  | ||||||
| 
 |  | ||||||
| 		emintTx.Sign(chainID, priv) |  | ||||||
| 
 |  | ||||||
| 		txs[i] = emintTx |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return txs |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func newTestSDKTxs( |  | ||||||
| 	codec *wire.Codec, chainID sdk.Int, msgs []sdk.Msg, pKeys []*ecdsa.PrivateKey, |  | ||||||
| 	accNums []int64, seqs []int64, fee auth.StdFee, |  | ||||||
| ) []Transaction { |  | ||||||
| 
 |  | ||||||
| 	txs := make([]Transaction, len(pKeys)) |  | ||||||
| 	etx := newTestEmbeddedTx(chainID, msgs, pKeys, accNums, seqs, fee) |  | ||||||
| 
 |  | ||||||
| 	for i, priv := range pKeys { |  | ||||||
| 		payload := codec.MustMarshalBinary(etx) |  | ||||||
| 
 |  | ||||||
| 		emintTx := NewTransaction( |  | ||||||
| 			uint64(i), testSDKAddress, sdk.NewInt(10), 100, |  | ||||||
| 			sdk.NewInt(100), payload, |  | ||||||
| 		) |  | ||||||
| 
 |  | ||||||
| 		emintTx.Sign(testChainID, priv) |  | ||||||
| 
 |  | ||||||
| 		txs[i] = emintTx |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return txs |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func TestConvertTx(t *testing.T) { |  | ||||||
| 	gethTxs := newTestGethTxs( |  | ||||||
| 		testChainID, |  | ||||||
| 		[]*ecdsa.PrivateKey{testPrivKey1, testPrivKey2}, |  | ||||||
| 		[]ethcmn.Address{testAddr1, testAddr2}, |  | ||||||
| 	) |  | ||||||
| 	ethTxs := newTestEthTxs( |  | ||||||
| 		testChainID, |  | ||||||
| 		[]*ecdsa.PrivateKey{testPrivKey1, testPrivKey2}, |  | ||||||
| 		[]ethcmn.Address{testAddr1, testAddr2}, |  | ||||||
| 	) |  | ||||||
| 
 |  | ||||||
| 	testCases := []struct { |  | ||||||
| 		ethTx      ethtypes.Transaction |  | ||||||
| 		emintTx    Transaction |  | ||||||
| 		expectedEq bool |  | ||||||
| 	}{ |  | ||||||
| 		{gethTxs[0], ethTxs[0], true}, |  | ||||||
| 		{gethTxs[0], ethTxs[1], false}, |  | ||||||
| 		{gethTxs[1], ethTxs[0], false}, |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for i, tc := range testCases { |  | ||||||
| 		convertedTx := tc.emintTx.ConvertTx(testChainID.BigInt()) |  | ||||||
| 
 |  | ||||||
| 		if tc.expectedEq { |  | ||||||
| 			require.Equal(t, tc.ethTx, convertedTx, fmt.Sprintf("unexpected result: test case #%d", i)) |  | ||||||
| 		} else { |  | ||||||
| 			require.NotEqual(t, tc.ethTx, convertedTx, fmt.Sprintf("unexpected result: test case #%d", i)) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| func TestValidation(t *testing.T) { | func TestValidation(t *testing.T) { | ||||||
| 	ethTxs := newTestEthTxs( | 	ethTxs := NewTestEthTxs( | ||||||
| 		testChainID, | 		TestChainID, | ||||||
| 		[]*ecdsa.PrivateKey{testPrivKey1}, | 		[]*ecdsa.PrivateKey{TestPrivKey1}, | ||||||
| 		[]ethcmn.Address{testAddr1}, | 		[]ethcmn.Address{TestAddr1}, | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
| 	testCases := []struct { | 	testCases := []struct { | ||||||
| @ -194,34 +48,34 @@ func TestValidation(t *testing.T) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func TestHasEmbeddedTx(t *testing.T) { | func TestHasEmbeddedTx(t *testing.T) { | ||||||
| 	testCodec := newTestCodec() | 	testCodec := NewTestCodec() | ||||||
| 	msgs := []sdk.Msg{sdk.NewTestMsg(sdk.AccAddress(testAddr1.Bytes()))} | 	msgs := []sdk.Msg{sdk.NewTestMsg(sdk.AccAddress(TestAddr1.Bytes()))} | ||||||
| 
 | 
 | ||||||
| 	sdkTxs := newTestSDKTxs( | 	sdkTxs := NewTestSDKTxs( | ||||||
| 		testCodec, testChainID, msgs, []*ecdsa.PrivateKey{testPrivKey1}, | 		testCodec, TestChainID, msgs, []*ecdsa.PrivateKey{TestPrivKey1}, | ||||||
| 		[]int64{0}, []int64{0}, newStdFee(), | 		[]int64{0}, []int64{0}, newStdFee(), | ||||||
| 	) | 	) | ||||||
| 	require.True(t, sdkTxs[0].HasEmbeddedTx(testSDKAddress)) | 	require.True(t, sdkTxs[0].HasEmbeddedTx(TestSDKAddress)) | ||||||
| 
 | 
 | ||||||
| 	ethTxs := newTestEthTxs( | 	ethTxs := NewTestEthTxs( | ||||||
| 		testChainID, | 		TestChainID, | ||||||
| 		[]*ecdsa.PrivateKey{testPrivKey1}, | 		[]*ecdsa.PrivateKey{TestPrivKey1}, | ||||||
| 		[]ethcmn.Address{testAddr1}, | 		[]ethcmn.Address{TestAddr1}, | ||||||
| 	) | 	) | ||||||
| 	require.False(t, ethTxs[0].HasEmbeddedTx(testSDKAddress)) | 	require.False(t, ethTxs[0].HasEmbeddedTx(TestSDKAddress)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func TestGetEmbeddedTx(t *testing.T) { | func TestGetEmbeddedTx(t *testing.T) { | ||||||
| 	testCodec := newTestCodec() | 	testCodec := NewTestCodec() | ||||||
| 	msgs := []sdk.Msg{sdk.NewTestMsg(sdk.AccAddress(testAddr1.Bytes()))} | 	msgs := []sdk.Msg{sdk.NewTestMsg(sdk.AccAddress(TestAddr1.Bytes()))} | ||||||
| 
 | 
 | ||||||
| 	ethTxs := newTestEthTxs( | 	ethTxs := NewTestEthTxs( | ||||||
| 		testChainID, | 		TestChainID, | ||||||
| 		[]*ecdsa.PrivateKey{testPrivKey1}, | 		[]*ecdsa.PrivateKey{TestPrivKey1}, | ||||||
| 		[]ethcmn.Address{testAddr1}, | 		[]ethcmn.Address{TestAddr1}, | ||||||
| 	) | 	) | ||||||
| 	sdkTxs := newTestSDKTxs( | 	sdkTxs := NewTestSDKTxs( | ||||||
| 		testCodec, testChainID, msgs, []*ecdsa.PrivateKey{testPrivKey1}, | 		testCodec, TestChainID, msgs, []*ecdsa.PrivateKey{TestPrivKey1}, | ||||||
| 		[]int64{0}, []int64{0}, newStdFee(), | 		[]int64{0}, []int64{0}, newStdFee(), | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
| @ -235,19 +89,19 @@ func TestGetEmbeddedTx(t *testing.T) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func TestTransactionGetMsgs(t *testing.T) { | func TestTransactionGetMsgs(t *testing.T) { | ||||||
| 	ethTxs := newTestEthTxs( | 	ethTxs := NewTestEthTxs( | ||||||
| 		testChainID, | 		TestChainID, | ||||||
| 		[]*ecdsa.PrivateKey{testPrivKey1}, | 		[]*ecdsa.PrivateKey{TestPrivKey1}, | ||||||
| 		[]ethcmn.Address{testAddr1}, | 		[]ethcmn.Address{TestAddr1}, | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
| 	msgs := ethTxs[0].GetMsgs() | 	msgs := ethTxs[0].GetMsgs() | ||||||
| 	require.Len(t, msgs, 1) | 	require.Len(t, msgs, 1) | ||||||
| 	require.Equal(t, ethTxs[0], msgs[0]) | 	require.Equal(t, ethTxs[0], msgs[0]) | ||||||
| 
 | 
 | ||||||
| 	expectedMsgs := []sdk.Msg{sdk.NewTestMsg(sdk.AccAddress(testAddr1.Bytes()))} | 	expectedMsgs := []sdk.Msg{sdk.NewTestMsg(sdk.AccAddress(TestAddr1.Bytes()))} | ||||||
| 	etx := newTestEmbeddedTx( | 	etx := newTestEmbeddedTx( | ||||||
| 		testChainID, expectedMsgs, []*ecdsa.PrivateKey{testPrivKey1}, | 		TestChainID, expectedMsgs, []*ecdsa.PrivateKey{TestPrivKey1}, | ||||||
| 		[]int64{0}, []int64{0}, newStdFee(), | 		[]int64{0}, []int64{0}, newStdFee(), | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
| @ -257,26 +111,26 @@ func TestTransactionGetMsgs(t *testing.T) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func TestGetRequiredSigners(t *testing.T) { | func TestGetRequiredSigners(t *testing.T) { | ||||||
| 	msgs := []sdk.Msg{sdk.NewTestMsg(sdk.AccAddress(testAddr1.Bytes()))} | 	msgs := []sdk.Msg{sdk.NewTestMsg(sdk.AccAddress(TestAddr1.Bytes()))} | ||||||
| 	etx := newTestEmbeddedTx( | 	etx := newTestEmbeddedTx( | ||||||
| 		testChainID, msgs, []*ecdsa.PrivateKey{testPrivKey1}, | 		TestChainID, msgs, []*ecdsa.PrivateKey{TestPrivKey1}, | ||||||
| 		[]int64{0}, []int64{0}, newStdFee(), | 		[]int64{0}, []int64{0}, newStdFee(), | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
| 	signers := etx.(EmbeddedTx).GetRequiredSigners() | 	signers := etx.(EmbeddedTx).GetRequiredSigners() | ||||||
| 	require.Equal(t, []sdk.AccAddress{sdk.AccAddress(testAddr1.Bytes())}, signers) | 	require.Equal(t, []sdk.AccAddress{sdk.AccAddress(TestAddr1.Bytes())}, signers) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func TestTxDecoder(t *testing.T) { | func TestTxDecoder(t *testing.T) { | ||||||
| 	testCodec := newTestCodec() | 	testCodec := NewTestCodec() | ||||||
| 	txDecoder := TxDecoder(testCodec, testSDKAddress) | 	txDecoder := TxDecoder(testCodec, TestSDKAddress) | ||||||
| 	msgs := []sdk.Msg{sdk.NewTestMsg(sdk.AccAddress(testAddr1.Bytes()))} | 	msgs := []sdk.Msg{sdk.NewTestMsg(sdk.AccAddress(TestAddr1.Bytes()))} | ||||||
| 
 | 
 | ||||||
| 	// create a non-SDK Ethereum transaction
 | 	// create a non-SDK Ethereum transaction
 | ||||||
| 	emintTx := NewTransaction( | 	emintTx := NewTransaction( | ||||||
| 		uint64(0), testAddr1, sdk.NewInt(10), 100, sdk.NewInt(100), nil, | 		uint64(0), TestAddr1, sdk.NewInt(10), 100, sdk.NewInt(100), nil, | ||||||
| 	) | 	) | ||||||
| 	emintTx.Sign(testChainID, testPrivKey1) | 	emintTx.Sign(TestChainID, TestPrivKey1) | ||||||
| 
 | 
 | ||||||
| 	// require the transaction to properly decode into a Transaction
 | 	// require the transaction to properly decode into a Transaction
 | ||||||
| 	txBytes := testCodec.MustMarshalBinary(emintTx) | 	txBytes := testCodec.MustMarshalBinary(emintTx) | ||||||
| @ -286,7 +140,7 @@ func TestTxDecoder(t *testing.T) { | |||||||
| 
 | 
 | ||||||
| 	// create embedded transaction and encode
 | 	// create embedded transaction and encode
 | ||||||
| 	etx := newTestEmbeddedTx( | 	etx := newTestEmbeddedTx( | ||||||
| 		testChainID, msgs, []*ecdsa.PrivateKey{testPrivKey1}, | 		TestChainID, msgs, []*ecdsa.PrivateKey{TestPrivKey1}, | ||||||
| 		[]int64{0}, []int64{0}, newStdFee(), | 		[]int64{0}, []int64{0}, newStdFee(), | ||||||
| 	) | 	) | ||||||
| 
 | 
 | ||||||
| @ -296,10 +150,10 @@ func TestTxDecoder(t *testing.T) { | |||||||
| 	testCodec.UnmarshalBinary(payload, &expectedEtx) | 	testCodec.UnmarshalBinary(payload, &expectedEtx) | ||||||
| 
 | 
 | ||||||
| 	emintTx = NewTransaction( | 	emintTx = NewTransaction( | ||||||
| 		uint64(0), testSDKAddress, sdk.NewInt(10), 100, | 		uint64(0), TestSDKAddress, sdk.NewInt(10), 100, | ||||||
| 		sdk.NewInt(100), payload, | 		sdk.NewInt(100), payload, | ||||||
| 	) | 	) | ||||||
| 	emintTx.Sign(testChainID, testPrivKey1) | 	emintTx.Sign(TestChainID, TestPrivKey1) | ||||||
| 
 | 
 | ||||||
| 	// require the transaction to properly decode into a Transaction
 | 	// require the transaction to properly decode into a Transaction
 | ||||||
| 	txBytes = testCodec.MustMarshalBinary(emintTx) | 	txBytes = testCodec.MustMarshalBinary(emintTx) | ||||||
| @ -314,9 +168,9 @@ func TestTxDecoder(t *testing.T) { | |||||||
| 
 | 
 | ||||||
| 	// create a non-SDK Ethereum transaction with an SDK address and garbage payload
 | 	// create a non-SDK Ethereum transaction with an SDK address and garbage payload
 | ||||||
| 	emintTx = NewTransaction( | 	emintTx = NewTransaction( | ||||||
| 		uint64(0), testSDKAddress, sdk.NewInt(10), 100, sdk.NewInt(100), []byte("garbage"), | 		uint64(0), TestSDKAddress, sdk.NewInt(10), 100, sdk.NewInt(100), []byte("garbage"), | ||||||
| 	) | 	) | ||||||
| 	emintTx.Sign(testChainID, testPrivKey1) | 	emintTx.Sign(TestChainID, TestPrivKey1) | ||||||
| 
 | 
 | ||||||
| 	// require the transaction to fail decoding as the payload is invalid
 | 	// require the transaction to fail decoding as the payload is invalid
 | ||||||
| 	txBytes = testCodec.MustMarshalBinary(emintTx) | 	txBytes = testCodec.MustMarshalBinary(emintTx) | ||||||
|  | |||||||
| @ -10,27 +10,27 @@ import ( | |||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| func TestValidateSigner(t *testing.T) { | func TestValidateSigner(t *testing.T) { | ||||||
| 	msgs := []sdk.Msg{sdk.NewTestMsg(sdk.AccAddress(testAddr1.Bytes()))} | 	msgs := []sdk.Msg{sdk.NewTestMsg(sdk.AccAddress(TestAddr1.Bytes()))} | ||||||
| 
 | 
 | ||||||
| 	// create message signing structure
 | 	// create message signing structure
 | ||||||
| 	signEtx := EmbeddedTxSign{testChainID.String(), 0, 0, msgs, newStdFee()} | 	signEtx := EmbeddedTxSign{TestChainID.String(), 0, 0, msgs, newStdFee()} | ||||||
| 
 | 
 | ||||||
| 	// create signing bytes and sign
 | 	// create signing bytes and sign
 | ||||||
| 	signBytes, err := signEtx.Bytes() | 	signBytes, err := signEtx.Bytes() | ||||||
| 	require.NoError(t, err) | 	require.NoError(t, err) | ||||||
| 
 | 
 | ||||||
| 	// require signing not to fail
 | 	// require signing not to fail
 | ||||||
| 	sig, err := ethcrypto.Sign(signBytes, testPrivKey1) | 	sig, err := ethcrypto.Sign(signBytes, TestPrivKey1) | ||||||
| 	require.NoError(t, err) | 	require.NoError(t, err) | ||||||
| 
 | 
 | ||||||
| 	// require signature to be valid
 | 	// require signature to be valid
 | ||||||
| 	err = ValidateSigner(signBytes, sig, testAddr1) | 	err = ValidateSigner(signBytes, sig, TestAddr1) | ||||||
| 	require.NoError(t, err) | 	require.NoError(t, err) | ||||||
| 
 | 
 | ||||||
| 	sig, err = ethcrypto.Sign(signBytes, testPrivKey2) | 	sig, err = ethcrypto.Sign(signBytes, TestPrivKey2) | ||||||
| 	require.NoError(t, err) | 	require.NoError(t, err) | ||||||
| 
 | 
 | ||||||
| 	// require signature to be invalid
 | 	// require signature to be invalid
 | ||||||
| 	err = ValidateSigner(signBytes, sig, testAddr1) | 	err = ValidateSigner(signBytes, sig, TestAddr1) | ||||||
| 	require.Error(t, err) | 	require.Error(t, err) | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user