Generating a load of keys for testing in Go
I am in the process of releasing my very "hacky" golang test environment that deep links into the go-ethereum code base.
An important part of testing smart contracts is to be able to generate and use an arbitrary number of keys/addresses to sign / send / receive transactions. Ideally we should not be using live key pairs so I created memorykeys which you can find at https://github.com/DaveAppleton/memorykeys
Thanks to Jeff Wilke for pointing me to the go-ethereum crypto module back in 2015
Objectives of this library
This library allows us to generate and use keys on an ad-hoc basis without storing them for re-use on a subsequent run.
We reference these keys by name and obtain
- the private key (for signing)
- a transaction object encapsulating that key for future use with ABIGEN
- the address
It is not expected to be necessary for concurrent creation of keys so keys are stored in a map which is not safe for concurrent writes.
GetPrivateKey(keyname) create a keypair associated with the name on first call, subsequent calls return the previous value.
launcher,err := memorykeys.GetPrivateKey("launcher")
GetAddress(keyName string) gets the address associated with a key. Creates the key if it does not exist
recipient,err := GetAddress("recipient")
GetTransactor(keyName string) gets a transaction object for use with ABIGEN objects. Creates the key if necessary.
deployer, err := GetTransactor("deployer")
ImportPrivateKey(keyName, hexKey) imports a hex encoded private key for use. BE CAREFUL NOT TO USE PRODUCTION KEYS
privateKey := "d31a46c5322e8e8a7e11f51cf9c4073fea42d33b431b5e7e76a82518fc178ea8" key, err := ImportPrivateKey("imported", privateKey)