github.com/InjectiveLabs/sdk-go@v1.53.0/chain/exchange/types/reclamation.go (about) 1 package types 2 3 import ( 4 "fmt" 5 6 sdksecp256k1 "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" 7 8 "github.com/InjectiveLabs/sdk-go/chain/crypto/ethsecp256k1" 9 10 sdk "github.com/cosmos/cosmos-sdk/types" 11 ) 12 13 func ValidateFundsReclaimSignature( 14 lockedAccountPubKey, signature []byte, 15 ) error { 16 // validate the signature of the locked account 17 lockedPubKey := sdksecp256k1.PubKey{ 18 Key: lockedAccountPubKey, 19 } 20 21 correctPubKey := ethsecp256k1.PubKey{ 22 Key: lockedAccountPubKey, 23 } 24 25 lockedAddress := sdk.AccAddress(lockedPubKey.Address()) 26 recipient := sdk.AccAddress(correctPubKey.Address()) 27 28 signMessage := ConstructFundsReclaimMessage(recipient, lockedAddress) 29 30 if !lockedPubKey.VerifySignature(signMessage, signature) { 31 return ErrInvalidSignature 32 } 33 return nil 34 } 35 36 func ConstructFundsReclaimMessage( 37 recipient, signer sdk.AccAddress, 38 ) []byte { 39 message := fmt.Sprintf("I authorize %s to reclaim my funds from locked account %s on Injective", recipient.String(), signer.String()) 40 return []byte(message) 41 }