mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-12-27 00:55:17 +00:00
133 lines
3.9 KiB
Go
133 lines
3.9 KiB
Go
//
|
|
// Copyright Coinbase, Inc. All Rights Reserved.
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
package mina
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"source.quilibrium.com/quilibrium/monorepo/nekryptology/pkg/core/curves/native/pasta/fq"
|
|
)
|
|
|
|
func TestNewKeys(t *testing.T) {
|
|
pk, sk, err := NewKeys()
|
|
require.NoError(t, err)
|
|
require.NotNil(t, sk)
|
|
require.NotNil(t, pk)
|
|
require.False(t, sk.value.IsZero())
|
|
require.False(t, pk.value.IsIdentity())
|
|
}
|
|
|
|
func TestSecretKeySignTransaction(t *testing.T) {
|
|
// See https://github.com/MinaProtocol/c-reference-signer/blob/master/reference_signer.c#L15
|
|
skValue := &fq.Fq{
|
|
0xca14d6eed923f6e3, 0x61185a1b5e29e6b2, 0xe26d38de9c30753b, 0x3fdf0efb0a5714,
|
|
}
|
|
sk := &SecretKey{value: skValue}
|
|
/*
|
|
This illustrates constructing and signing the following transaction.
|
|
amounts are in nanocodas.
|
|
{
|
|
"common": {
|
|
"fee": "3",
|
|
"fee_token": "1",
|
|
"fee_payer_pk": "B62qiy32p8kAKnny8ZFwoMhYpBppM1DWVCqAPBYNcXnsAHhnfAAuXgg",
|
|
"nonce": "200",
|
|
"valid_until": "10000",
|
|
"memo": "E4Yq8cQXC1m9eCYL8mYtmfqfJ5cVdhZawrPQ6ahoAay1NDYfTi44K"
|
|
},
|
|
"body": [
|
|
"Payment",
|
|
{
|
|
"source_pk": "B62qiy32p8kAKnny8ZFwoMhYpBppM1DWVCqAPBYNcXnsAHhnfAAuXgg",
|
|
"receiver_pk": "B62qrcFstkpqXww1EkSGrqMCwCNho86kuqBd4FrAAUsPxNKdiPzAUsy",
|
|
"token_id": "1",
|
|
"amount": "42"
|
|
}
|
|
]
|
|
}
|
|
*/
|
|
feePayerPk := new(PublicKey)
|
|
err := feePayerPk.ParseAddress("B62qiy32p8kAKnny8ZFwoMhYpBppM1DWVCqAPBYNcXnsAHhnfAAuXgg")
|
|
require.NoError(t, err)
|
|
sourcePk := new(PublicKey)
|
|
err = sourcePk.ParseAddress("B62qiy32p8kAKnny8ZFwoMhYpBppM1DWVCqAPBYNcXnsAHhnfAAuXgg")
|
|
require.NoError(t, err)
|
|
receiverPk := new(PublicKey)
|
|
err = receiverPk.ParseAddress("B62qrcFstkpqXww1EkSGrqMCwCNho86kuqBd4FrAAUsPxNKdiPzAUsy")
|
|
require.NoError(t, err)
|
|
txn := &Transaction{
|
|
Fee: 3,
|
|
FeeToken: 1,
|
|
Nonce: 200,
|
|
ValidUntil: 10000,
|
|
Memo: "this is a memo",
|
|
FeePayerPk: feePayerPk,
|
|
SourcePk: sourcePk,
|
|
ReceiverPk: receiverPk,
|
|
TokenId: 1,
|
|
Amount: 42,
|
|
Locked: false,
|
|
Tag: [3]bool{false, false, false},
|
|
NetworkId: MainNet,
|
|
}
|
|
sig, err := sk.SignTransaction(txn)
|
|
require.NoError(t, err)
|
|
pk := sk.GetPublicKey()
|
|
require.NoError(t, pk.VerifyTransaction(sig, txn))
|
|
}
|
|
|
|
func TestSecretKeySignMessage(t *testing.T) {
|
|
// See https://github.com/MinaProtocol/c-reference-signer/blob/master/reference_signer.c#L15
|
|
skValue := &fq.Fq{
|
|
0xca14d6eed923f6e3, 0x61185a1b5e29e6b2, 0xe26d38de9c30753b, 0x3fdf0efb0a5714,
|
|
}
|
|
sk := &SecretKey{value: skValue}
|
|
sig, err := sk.SignMessage("A test message.")
|
|
require.NoError(t, err)
|
|
pk := sk.GetPublicKey()
|
|
require.NoError(t, pk.VerifyMessage(sig, "A test message."))
|
|
}
|
|
|
|
func TestSecretKeySignTransactionStaking(t *testing.T) {
|
|
// https://github.com/MinaProtocol/c-reference-signer/blob/master/reference_signer.c#L128
|
|
skValue := &fq.Fq{
|
|
0xca14d6eed923f6e3, 0x61185a1b5e29e6b2, 0xe26d38de9c30753b, 0x3fdf0efb0a5714,
|
|
}
|
|
sk := &SecretKey{value: skValue}
|
|
|
|
feePayerPk := new(PublicKey)
|
|
err := feePayerPk.ParseAddress("B62qiy32p8kAKnny8ZFwoMhYpBppM1DWVCqAPBYNcXnsAHhnfAAuXgg")
|
|
require.NoError(t, err)
|
|
sourcePk := new(PublicKey)
|
|
err = sourcePk.ParseAddress("B62qiy32p8kAKnny8ZFwoMhYpBppM1DWVCqAPBYNcXnsAHhnfAAuXgg")
|
|
require.NoError(t, err)
|
|
receiverPk := new(PublicKey)
|
|
err = receiverPk.ParseAddress("B62qkfHpLpELqpMK6ZvUTJ5wRqKDRF3UHyJ4Kv3FU79Sgs4qpBnx5RR")
|
|
require.NoError(t, err)
|
|
txn := &Transaction{
|
|
Fee: 3,
|
|
FeeToken: 1,
|
|
Nonce: 10,
|
|
ValidUntil: 4000,
|
|
Memo: "more delegates more fun",
|
|
FeePayerPk: feePayerPk,
|
|
SourcePk: sourcePk,
|
|
ReceiverPk: receiverPk,
|
|
TokenId: 1,
|
|
Amount: 0,
|
|
Locked: false,
|
|
Tag: [3]bool{false, false, true},
|
|
NetworkId: MainNet,
|
|
}
|
|
sig, err := sk.SignTransaction(txn)
|
|
require.NoError(t, err)
|
|
pk := sk.GetPublicKey()
|
|
require.NoError(t, pk.VerifyTransaction(sig, txn))
|
|
}
|