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  }