From 1e6982a0c32716223f6ef1c3cbb7c9bbd56cd9e9 Mon Sep 17 00:00:00 2001 From: Ivan Dmitriev <100341+idmitriev@users.noreply.github.com> Date: Thu, 28 Sep 2023 16:18:27 +0400 Subject: [PATCH] Feature/address for network2 (#68) * Add method to generate address for prefix --- core/pkg/crypto/ed25519.go | 4 ++++ core/pkg/crypto/ed25519_test.go | 6 ++++++ core/pkg/crypto/scheme.go | 1 + core/pkg/crypto/scheme_test.go | 7 ++++--- core/pkg/crypto/secp256k1.go | 4 ++++ core/pkg/crypto/secp256k1_test.go | 6 ++++++ core/pkg/crypto/sr25519.go | 4 ++++ core/pkg/crypto/sr25519_test.go | 16 ++++++++++++---- 8 files changed, 41 insertions(+), 7 deletions(-) diff --git a/core/pkg/crypto/ed25519.go b/core/pkg/crypto/ed25519.go index e01bdce..b6321e6 100644 --- a/core/pkg/crypto/ed25519.go +++ b/core/pkg/crypto/ed25519.go @@ -57,6 +57,10 @@ func (e *ed25519Scheme) Address() (string, error) { return subkey.SS58Address(e.publicKey, 42) } +func (e *ed25519Scheme) AddressForNetwork(network uint8) (string, error) { + return subkey.SS58Address(e.publicKey, network) +} + func (e *ed25519Scheme) PublicKeyHex() string { return fmt.Sprintf("0x%s", hex.EncodeToString(e.publicKey)) } diff --git a/core/pkg/crypto/ed25519_test.go b/core/pkg/crypto/ed25519_test.go index 44846d1..40bc1b4 100644 --- a/core/pkg/crypto/ed25519_test.go +++ b/core/pkg/crypto/ed25519_test.go @@ -91,6 +91,12 @@ func TestAddressEd25519Scheme(t *testing.T) { assert.Equal(t, address, addr) } +func TestAddressForCereNetworkEd25519Scheme(t *testing.T) { + addr, err := testEd25519Scheme.AddressForNetwork(54) + assert.NoError(t, err) + assert.Equal(t, addressForCereNetwork, addr) +} + func TestPublicKeyHexEd25519Scheme(t *testing.T) { keyHex := testEd25519Scheme.PublicKeyHex() assert.Equal(t, pubKeyHex, keyHex) diff --git a/core/pkg/crypto/scheme.go b/core/pkg/crypto/scheme.go index 5bc8003..8faed31 100644 --- a/core/pkg/crypto/scheme.go +++ b/core/pkg/crypto/scheme.go @@ -16,6 +16,7 @@ type ( Name() string PublicKey() []byte Address() (string, error) + AddressForNetwork(network uint8) (string, error) PublicKeyHex() string } ) diff --git a/core/pkg/crypto/scheme_test.go b/core/pkg/crypto/scheme_test.go index 31c0a91..3992edc 100644 --- a/core/pkg/crypto/scheme_test.go +++ b/core/pkg/crypto/scheme_test.go @@ -8,9 +8,10 @@ import ( ) const ( - content = "Hello world!" - address = "5FJDBC3jJbWX48PyfpRCo7pKsFwSy4Mzj5t39PfXixD5jMgy" - pubKeyHex = "0x8f01969eb5244d853cc9c6ad73c46d8a1a091842c414cabd2377531f0832635f" + content = "Hello world!" + address = "5FJDBC3jJbWX48PyfpRCo7pKsFwSy4Mzj5t39PfXixD5jMgy" + addressForCereNetwork = "6Sk8H6YZv61EvqFYYCyVKw1Rd5eydFvEzNXcXbP9HDLw7E4W" + pubKeyHex = "0x8f01969eb5244d853cc9c6ad73c46d8a1a091842c414cabd2377531f0832635f" ) func TestCreateScheme(t *testing.T) { diff --git a/core/pkg/crypto/secp256k1.go b/core/pkg/crypto/secp256k1.go index e5ec51f..d28a48c 100644 --- a/core/pkg/crypto/secp256k1.go +++ b/core/pkg/crypto/secp256k1.go @@ -18,6 +18,10 @@ func (s *secp256k1Scheme) Address() (string, error) { return subkey.SS58Address(s.publicKey, 42) } +func (s *secp256k1Scheme) AddressForNetwork(network uint8) (string, error) { + return subkey.SS58Address(s.publicKey, network) +} + func (s *secp256k1Scheme) PublicKeyHex() string { return fmt.Sprintf("0x%s", hex.EncodeToString(s.publicKey)) } diff --git a/core/pkg/crypto/secp256k1_test.go b/core/pkg/crypto/secp256k1_test.go index 0252ada..dee1b6f 100644 --- a/core/pkg/crypto/secp256k1_test.go +++ b/core/pkg/crypto/secp256k1_test.go @@ -66,6 +66,12 @@ func TestSecp256k1_Address(t *testing.T) { assert.Equal(t, expAddress, address) } +func TestSecp256k1_AddressForCereNetwork(t *testing.T) { + address, err := testEd25519Scheme.AddressForNetwork(54) + assert.NoError(t, err) + assert.Equal(t, addressForCereNetwork, address) +} + func TestSecp256k1_PublicKeyHex(t *testing.T) { publicKeyHex := testEd25519Scheme.PublicKeyHex() assert.Equal(t, publicKeyHex, pubKeyHex) diff --git a/core/pkg/crypto/sr25519.go b/core/pkg/crypto/sr25519.go index 7c538d4..2f86f62 100644 --- a/core/pkg/crypto/sr25519.go +++ b/core/pkg/crypto/sr25519.go @@ -59,6 +59,10 @@ func (s *sr25519Scheme) Address() (string, error) { return subkey.SS58Address(s.publicKey, 42) } +func (s *sr25519Scheme) AddressForNetwork(network uint8) (string, error) { + return subkey.SS58Address(s.publicKey, network) +} + func (s *sr25519Scheme) PublicKeyHex() string { return fmt.Sprintf("0x%s", hex.EncodeToString(s.publicKey)) } diff --git a/core/pkg/crypto/sr25519_test.go b/core/pkg/crypto/sr25519_test.go index 697fe8b..3008094 100644 --- a/core/pkg/crypto/sr25519_test.go +++ b/core/pkg/crypto/sr25519_test.go @@ -10,9 +10,11 @@ import ( ) const ( - privKeySr25519 = "6e40d467e86ec447ae0088c81072feff8c860eebcff7dc44017b1b15746cce0d" - pubKeyHexSr25519 = "0xc8393bc5fd86bccda163187c8c23cba9d63622a745ed59fedc51d51210d1884f" - signatureSr25519 = "ba4a02f174694ee29a6a38b4ad2c16ff59f590da38694b556299197d1b352f464db889d93d1e3d86b068522aabb3585f50c129e1565a48b653336014a5fe158f" + privKeySr25519 = "6e40d467e86ec447ae0088c81072feff8c860eebcff7dc44017b1b15746cce0d" + pubKeyHexSr25519 = "0xc8393bc5fd86bccda163187c8c23cba9d63622a745ed59fedc51d51210d1884f" + signatureSr25519 = "ba4a02f174694ee29a6a38b4ad2c16ff59f590da38694b556299197d1b352f464db889d93d1e3d86b068522aabb3585f50c129e1565a48b653336014a5fe158f" + addressSr25519 = "5GbESExKAqUSer8YHHRpze6XDGjRaC2dpS7E44vMiXmEHoSe" + addressForCereNetworkSr25519 = "6U39Y9T9nKyAXYz79fz7XTHcy6SxEPat5ikoSGdyGnu5fd9V" ) var ( @@ -70,7 +72,13 @@ func TestSignSr25519(t *testing.T) { func TestAddressSr25519(t *testing.T) { address, err := testSr25519Scheme.Address() assert.NoError(t, err) - assert.Equal(t, address, address) + assert.Equal(t, addressSr25519, address) +} + +func TestAddressForCereNetworkSr25519(t *testing.T) { + address, err := testSr25519Scheme.AddressForNetwork(54) + assert.NoError(t, err) + assert.Equal(t, address, addressForCereNetworkSr25519) } func TestPublicKeyHexSr25519(t *testing.T) {