Skip to content

Commit

Permalink
♻️ refactor: refactor the eip712 module to repository pattern
Browse files Browse the repository at this point in the history
  • Loading branch information
pouya-eghbali committed Apr 10, 2024
1 parent cd94a3c commit 4f1a08b
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 25 deletions.
3 changes: 1 addition & 2 deletions internal/pos/eip712.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"github.com/KenshiTech/unchained/config"
"github.com/KenshiTech/unchained/ethereum/contracts"
"github.com/KenshiTech/unchained/log"
"github.com/KenshiTech/unchained/pos/eip712"

"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/common"
Expand All @@ -31,7 +30,7 @@ func (s *Repository) Slash(address [20]byte, to common.Address, amount *big.Int,
NftIds: nftIds,
}

signature, err := eip712.SignTransferRequest(s.evmSigner, &transfer)
signature, err := s.eip712Signer.SignTransferRequest(s.evmSigner, &transfer)

if err != nil {
log.Logger.
Expand Down
48 changes: 26 additions & 22 deletions internal/pos/eip712/sign.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,19 @@ import (
"github.com/ethereum/go-ethereum/signer/core/apitypes"
)

var domain apitypes.TypedDataDomain
type EIP712Signer struct {
domain apitypes.TypedDataDomain
}

func bytesToUnchainedSignature(b []byte) *contracts.UnchainedStakingSignature {
func (s *EIP712Signer) bytesToUnchainedSignature(signature []byte) *contracts.UnchainedStakingSignature {
return &contracts.UnchainedStakingSignature{
V: b[64],
R: [32]byte(b[:32]),
S: [32]byte(b[32:64]),
V: signature[64],
R: [32]byte(signature[:32]),
S: [32]byte(signature[32:64]),
}
}

func signEip712Message(evmSigner *ethereum.EvmSigner, data *apitypes.TypedData) (*contracts.UnchainedStakingSignature, error) {
func (s *EIP712Signer) signEip712Message(evmSigner *ethereum.EvmSigner, data *apitypes.TypedData) (*contracts.UnchainedStakingSignature, error) {
domainSeparator, err := data.HashStruct("EIP712Domain", data.Domain.Map())
if err != nil {
return nil, err
Expand All @@ -44,14 +46,14 @@ func signEip712Message(evmSigner *ethereum.EvmSigner, data *apitypes.TypedData)
signature[64] += 27
}

return bytesToUnchainedSignature(signature), nil
return s.bytesToUnchainedSignature(signature), nil
}

func SignTransferRequest(evmSigner *ethereum.EvmSigner, request *contracts.UnchainedStakingEIP712Transfer) (*contracts.UnchainedStakingSignature, error) {
func (s *EIP712Signer) SignTransferRequest(evmSigner *ethereum.EvmSigner, request *contracts.UnchainedStakingEIP712Transfer) (*contracts.UnchainedStakingSignature, error) {
data := &apitypes.TypedData{
Types: Types,
PrimaryType: "Transfer",
Domain: domain,
Domain: s.domain,
Message: map[string]interface{}{
"signer": evmSigner.Address,
"from": request.From,
Expand All @@ -62,14 +64,14 @@ func SignTransferRequest(evmSigner *ethereum.EvmSigner, request *contracts.Uncha
},
}

return signEip712Message(evmSigner, data)
return s.signEip712Message(evmSigner, data)
}

func SignSetParamsRequest(evmSigner *ethereum.EvmSigner, request *contracts.UnchainedStakingEIP712SetParams) (*contracts.UnchainedStakingSignature, error) {
func (s *EIP712Signer) SignSetParamsRequest(evmSigner *ethereum.EvmSigner, request *contracts.UnchainedStakingEIP712SetParams) (*contracts.UnchainedStakingSignature, error) {
data := &apitypes.TypedData{
Types: Types,
PrimaryType: "SetParams",
Domain: domain,
Domain: s.domain,
Message: map[string]interface{}{
"requester": evmSigner.Address,
"token": request.Token,
Expand All @@ -81,14 +83,14 @@ func SignSetParamsRequest(evmSigner *ethereum.EvmSigner, request *contracts.Unch
},
}

return signEip712Message(evmSigner, data)
return s.signEip712Message(evmSigner, data)
}

func SignSetNftPriceRequest(evmSigner *ethereum.EvmSigner, request *contracts.UnchainedStakingEIP712SetNftPrice) (*contracts.UnchainedStakingSignature, error) {
func (s *EIP712Signer) SignSetNftPriceRequest(evmSigner *ethereum.EvmSigner, request *contracts.UnchainedStakingEIP712SetNftPrice) (*contracts.UnchainedStakingSignature, error) {
data := &apitypes.TypedData{
Types: Types,
PrimaryType: "SetNftPrice",
Domain: domain,
Domain: s.domain,
Message: map[string]interface{}{
"requester": evmSigner.Address,
"nftId": request.NftId,
Expand All @@ -97,14 +99,16 @@ func SignSetNftPriceRequest(evmSigner *ethereum.EvmSigner, request *contracts.Un
},
}

return signEip712Message(evmSigner, data)
return s.signEip712Message(evmSigner, data)
}

func InitDomain(chainID *big.Int, verifyingContract string) {
domain = apitypes.TypedDataDomain{
Name: "Unchained",
Version: "1.0.0",
ChainId: math.NewHexOrDecimal256(chainID.Int64()),
VerifyingContract: verifyingContract,
func New(chainID *big.Int, verifyingContract string) *EIP712Signer {
return &EIP712Signer{
domain: apitypes.TypedDataDomain{
Name: "Unchained",
Version: "1.0.0",
ChainId: math.NewHexOrDecimal256(chainID.Int64()),
VerifyingContract: verifyingContract,
},
}
}
3 changes: 2 additions & 1 deletion internal/pos/pos.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ type Repository struct {
lastUpdated *xsync.MapOf[[20]byte, *big.Int]
base *big.Int
evmSigner *ethereum.EvmSigner
eip712Signer *eip712.EIP712Signer
}

func (s *Repository) GetTotalVotingPower() (*big.Int, error) {
Expand Down Expand Up @@ -151,7 +152,7 @@ func New(
return s
}

eip712.InitDomain(chainID, config.App.ProofOfStake.Address)
s.eip712Signer = eip712.New(chainID, config.App.ProofOfStake.Address)

return s
}
Expand Down

0 comments on commit 4f1a08b

Please sign in to comment.