Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add tests for stake delegation transactions in pallas signer
Browse files Browse the repository at this point in the history
ylecornec committed Dec 13, 2022
1 parent 77eb14f commit e9d9f74
Showing 1 changed file with 129 additions and 0 deletions.
129 changes: 129 additions & 0 deletions keys/signer_pallas_test.go
Original file line number Diff line number Diff line change
@@ -120,6 +120,46 @@ func (s *ts) TestParseSigningPayload() {
Memo: &memo,
},
}
signingPayloadWithDelegation = SigningPayload{
StakeDelegation: &PayloadFieldsDelegation{
NewDelegate: toAddress,
Delegator: fromAddress,
Fee: "12",
Nonce: "56",
ValidUntil: &validUntil,
Memo: &memo,
},
}
signingPayloadWithDelegationAndNullValidUntilAndNullMemo = SigningPayload{
StakeDelegation: &PayloadFieldsDelegation{
NewDelegate: toAddress,
Delegator: fromAddress,
Fee: "12",
Nonce: "56",
ValidUntil: nil,
Memo: nil,
},
}
signingPayloadWithDelegationAndInvalidFromPublicKey = SigningPayload{
StakeDelegation: &PayloadFieldsDelegation{
NewDelegate: toAddress,
Delegator: "InvalidFrom",
Fee: "12",
Nonce: "56",
ValidUntil: &validUntil,
Memo: &memo,
},
}
signingPayloadWithDelegationAndInvalidToPublicKey = SigningPayload{
StakeDelegation: &PayloadFieldsDelegation{
NewDelegate: "InvalidTo",
Delegator: fromAddress,
Fee: "12",
Nonce: "56",
ValidUntil: &validUntil,
Memo: &memo,
},
}
)

s.Run("successful to parse when payment exists", func() {
@@ -234,6 +274,95 @@ func (s *ts) TestParseSigningPayload() {
s.Require().Error(err)
s.Require().Nil(transactionBinary)
})

s.Run("successful to parse when stake delegation exists", func() {
payloadBinary, _ := json.Marshal(signingPayloadWithDelegation)
payload := &types.SigningPayload{
AccountIdentifier: &types.AccountIdentifier{Address: "test"},
Bytes: payloadBinary,
SignatureType: types.SchnorrPoseidon,
}
transaction, err := ParseSigningPayload(payload)
s.Require().NoError(err)
transactionBinary, err := transaction.MarshalBinary()
s.Require().NoError(err)

expectedTransaction := mina.Transaction{
Fee: 12,
FeeToken: 1,
FeePayerPk: fromPublicKey,
Nonce: 56,
ValidUntil: 78,
Memo: "memo",
Tag: [3]bool{false, false, true},
SourcePk: fromPublicKey,
ReceiverPk: toPublicKey,
TokenId: 1,
Amount: 0,
Locked: false,
NetworkId: mina.TestNet,
}
expectedTransactionBinary, err := expectedTransaction.MarshalBinary()
s.Require().NoError(err)
s.Require().Equal(expectedTransactionBinary, transactionBinary)
})

s.Run("successful to parse when delegation exists with null valid_until and memo", func() {
payloadBinary, _ := json.Marshal(signingPayloadWithDelegationAndNullValidUntilAndNullMemo)
payload := &types.SigningPayload{
AccountIdentifier: &types.AccountIdentifier{Address: "test"},
Bytes: payloadBinary,
SignatureType: types.SchnorrPoseidon,
}

transaction, err := ParseSigningPayload(payload)
s.Require().NoError(err)
transactionBinary, err := transaction.MarshalBinary()
s.Require().NoError(err)

expectedTransaction := mina.Transaction{
Fee: 12,
FeeToken: 1,
FeePayerPk: fromPublicKey,
Nonce: 56,
ValidUntil: 4294967295,
Memo: "",
Tag: [3]bool{false, false, true},
SourcePk: fromPublicKey,
ReceiverPk: toPublicKey,
TokenId: 1,
Amount: 0,
Locked: false,
NetworkId: mina.TestNet,
}
expectedTransactionBinary, err := expectedTransaction.MarshalBinary()
s.Require().NoError(err)
s.Require().Equal(expectedTransactionBinary, transactionBinary)
})

s.Run("failed to parse when from public key in delegation is invalid", func() {
payloadBinary, _ := json.Marshal(signingPayloadWithDelegationAndInvalidFromPublicKey)
payload := &types.SigningPayload{
AccountIdentifier: &types.AccountIdentifier{Address: "test"},
Bytes: payloadBinary,
SignatureType: types.SchnorrPoseidon,
}
transactionBinary, err := ParseSigningPayload(payload)
s.Require().Error(err)
s.Require().Nil(transactionBinary)
})

s.Run("failed to parse when to public key in delegation is invalid", func() {
payloadBinary, _ := json.Marshal(signingPayloadWithDelegationAndInvalidToPublicKey)
payload := &types.SigningPayload{
AccountIdentifier: &types.AccountIdentifier{Address: "test"},
Bytes: payloadBinary,
SignatureType: types.SchnorrPoseidon,
}
transactionBinary, err := ParseSigningPayload(payload)
s.Require().Error(err)
s.Require().Nil(transactionBinary)
})
}

func TestSignPallas(t *testing.T) {

0 comments on commit e9d9f74

Please sign in to comment.