Documentation
¶
Index ¶
- Constants
- type CommitsV4
- type InputV3
- type InputV4
- type KernelFeaturesArgsV4
- type OutputFeaturesV4
- type OutputV3
- type OutputV4
- type ParticipantDataV3
- type ParticipantDataV4
- type PaymentInfoV3
- type PaymentInfoV4
- type SlateV3
- type SlateV4
- type SlateVersion
- type TransactionBodyV3
- type TransactionBodyV4
- type TransactionV3
- type TransactionV4
- type TxKernelV3
- type TxKernelV4
- type VersionCompatInfoV3
- type VersionCompatInfoV4
Constants ¶
const ( // UnknownSlateState coming from earlier versions of the slate UnknownSlateState slateStateV4 = iota // Standard1SlateState flow, freshly init Standard1SlateState // Standard2SlateState flow, return journey Standard2SlateState // Standard3SlateState flow, ready for transaction posting Standard3SlateState // Invoice1SlateState flow, freshly init Invoice1SlateState // Invoice2SlateState flow, return journey Invoice2SlateState // Invoice3SlateState flow, ready for tranasction posting Invoice3SlateState )
const CurrentSlateVersion uint16 = 4
CurrentSlateVersion is the most recent version of the slate
const GrinBlockHeaderVersion uint16 = 3
GrinBlockHeaderVersion is the grin block header this slate is intended to be compatible with
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CommitsV4 ¶
type CommitsV4 struct {
// Options for an output's structure or use
F OutputFeaturesV4 `json:"f"`
// The homomorphic commitment representing the output amount
C string `json:"c"`
// A proof that the commitment is in the right range
// Only applies for transaction outputs
P *string `json:"p,omitempty"`
}
CommitsV4 is a v4 commit
type InputV3 ¶
type InputV3 struct {
// The features of the output being spent.
// We will check maturity for coinbase output.
Features core.OutputFeatures `json:"features"`
// The commit referencing the output being spent.
Commit string `json:"commit"`
}
InputV3 is a v3 input
type InputV4 ¶
type InputV4 struct {
// The features of the output being spent.
// We will check maturity for coinbase output.
Features OutputFeaturesV4 `json:"features"`
// The commit referencing the output being spent.
Commit string `json:"commit"`
}
InputV4 is a v4 input
type KernelFeaturesArgsV4 ¶
type KernelFeaturesArgsV4 struct {
/// Lock height, for HeightLocked
LockHgt core.Uint64 `json:"lock_hgt"`
}
KernelFeaturesArgsV4 are the kernel features arguments definition
type OutputV3 ¶
type OutputV3 struct {
// Options for an output's structure or use
Features core.OutputFeatures `json:"features"`
// The homomorphic commitment representing the output amount
Commit string `json:"commit"`
// A proof that the commitment is in the right range
Proof string `json:"proof"`
}
OutputV3 is a v3 output
type OutputV4 ¶
type OutputV4 struct {
// Options for an output's structure or use
Features OutputFeaturesV4 `json:"features"`
// The homomorphic commitment representing the output amount
Com string `json:"com"`
// A proof that the commitment is in the right range
Prf string `json:"prf"`
}
OutputV4 is a v4 output
type ParticipantDataV3 ¶
type ParticipantDataV3 struct {
// Id of participant in the transaction. (For now, 0=sender, 1=rec)
ID core.Uint64 `json:"id"`
// Public key corresponding to private blinding factor
PublicBlindExcess string `json:"public_blind_excess"`
// Public key corresponding to private nonce
PublicNonce string `json:"public_nonce"`
// Public partial signature
PartSig *string `json:"part_sig"`
// A message for other participants
Message *string `json:"message"`
// Signature, created with private key corresponding to 'public_blind_excess'
MessageSig *string `json:"message_sig"`
}
ParticipantDataV3 is the participant data slate version 3
type ParticipantDataV4 ¶
type ParticipantDataV4 struct {
// Public key corresponding to private blinding factor
Xs string `json:"xs"`
// Public key corresponding to private nonce
Nonce string `json:"nonce"`
// Public partial signature
Part *string `json:"part,omitempty"`
}
ParticipantDataV4 is a v4 participant data
type PaymentInfoV3 ¶
type PaymentInfoV3 struct {
SenderAddress string `json:"sender_address"`
ReceiverAddress string `json:"receiver_address"`
ReceiverSignature *string `json:"receiver_signature"`
}
PaymentInfoV3 is a v3 payment info
type PaymentInfoV4 ¶
type PaymentInfoV4 struct {
Saddr string `json:"saddr"`
Raddr string `json:"raddr"`
Rsig *string `json:"rsig,omitempty"`
}
PaymentInfoV4 is a v4 payment info
type SlateV3 ¶
type SlateV3 struct {
// Versioning info
VersionInfo VersionCompatInfoV3 `json:"version_info"`
// The number of participants intended to take part in this transaction
NumParticipants uint `json:"num_participants"`
// Unique transaction ID, selected by sender
ID uuid.UUID `json:"id"`
// The core transaction data:
// inputs, outputs, kernels, kernel offset
Transaction TransactionV3 `json:"tx"`
// base amount (excluding fee)
Amount core.Uint64 `json:"amount"`
// fee amount
Fee core.Uint64 `json:"fee"`
// Block height for the transaction
Height core.Uint64 `json:"height"`
// Lock height
LockHeight core.Uint64 `json:"lock_height"`
// TTL, the block height at which wallets
// should refuse to process the transaction and unlock all
// associated outputs
TTLCutoffHeight *core.Uint64 `json:"ttl_cutoff_height"`
// Participant data, each participant in the transaction will
// insert their public data here. For now, 0 is sender and 1
// is receiver, though this will change for multi-party
ParticipantData []ParticipantDataV3 `json:"participant_data"`
// Payment Proof
PaymentProof *PaymentInfoV3 `json:"payment_proof"`
}
SlateV3 slate v3
type SlateV4 ¶
type SlateV4 struct {
// Versioning info
Ver VersionCompatInfoV4 `json:"ver"`
// Unique transaction ID, selected by sender
ID uuid.UUID `json:"id"`
// Slate state
Sta slateStateV4 `json:"sta"`
// Optional fields depending on state
// Offset, modified by each participant inserting inputs
Off string `json:"off,omitempty"`
// The number of participants intended to take part in this transaction, optional
NumParts uint8 `json:"num_parts"`
// base amount (excluding fee)
Amt core.Uint64 `json:"amt"`
// fee amount
Fee core.Uint64 `json:"fee"`
// kernel features, if any
Feat uint8 `json:"feat"`
// TTL, the block height at which wallets
// should refuse to process the transaction and unlock all
TTL core.Uint64 `json:"ttl"`
// Structs always required
// Participant data, each participant in the transaction will
// insert their public data here. For now, 0 is sender and 1
// is receiver, though this will change for multi-party
Sigs []ParticipantDataV4 `json:"sigs"`
// Situational, but required at some point in the tx
// Inputs/Output commits added to slate
Coms *[]CommitsV4 `json:"coms,omitempty"`
// Optional Structs
// Payment Proof
Proof *PaymentInfoV4 `json:"proof,omitempty"`
// Kernel features arguments
FeatArgs *KernelFeaturesArgsV4 `json:"feat_args,omitempty"`
}
SlateV4 slate v4
func (SlateV4) MarshalJSON ¶
MarshalJSON is a custom marshaller to account for default field
func (*SlateV4) UnmarshalJSON ¶
UnmarshalJSON is a custom unmarshaller that respect default value
type SlateVersion ¶
type SlateVersion int
SlateVersion represents the slate version
const ( // V4 (most current) V4 SlateVersion = iota // V3 (3.0.0 - 4.0.0) V3 )
type TransactionBodyV3 ¶
type TransactionBodyV3 struct {
// List of inputs spent by the transaction.
Inputs []InputV3 `json:"inputs"`
// List of outputs the transaction produces.
Outputs []OutputV3 `json:"outputs"`
// List of kernels that make up this transaction (usually a single kernel).
Kernels []TxKernelV3 `json:"kernels"`
}
TransactionBodyV3 represent a v3 transaction body
type TransactionBodyV4 ¶
type TransactionBodyV4 struct {
// List of inputs spent by the transaction.
Ins []InputV4 `json:"ins"`
// List of outputs the transaction produces.
Outs []OutputV4 `json:"outs"`
// List of kernels that make up this transaction (usually a single kernel).
Kers []TxKernelV4 `json:"kers"`
}
TransactionBodyV4 is a common abstraction for transaction and block
type TransactionV3 ¶
type TransactionV3 struct {
/// The kernel "offset" k2
/// excess is k1G after splitting the key k = k1 + k2
Offset string `json:"offset"`
/// The transaction body - inputs/outputs/kernels
Body TransactionBodyV3 `json:"body"`
}
TransactionV3 is a v3 transaction
type TransactionV4 ¶
type TransactionV4 struct {
// The kernel "offset" k2
// excess is k1G after splitting the key k = k1 + k2
Offset string `json:"offset"`
// The transaction body - inputs/outputs/kernels
Body TransactionBodyV4 `json:"body"`
}
TransactionV4 is a v4 transaction
type TxKernelV3 ¶
type TxKernelV3 struct {
// Options for a kernel's structure or use
Features core.KernelFeatures `json:"features"`
// Fee originally included in the transaction this proof is for.
Fee core.Uint64 `json:"fee"`
// This kernel is not valid earlier than lock_height blocks
// The max lock_height of all *inputs* to this transaction
LockHeight core.Uint64 `json:"lock_height"`
// Remainder of the sum of all transaction commitments. If the transaction
// is well formed, amounts components should sum to zero and the excess
// is hence a valid public key.
Excess string `json:"excess"`
// The signature proving the excess is a valid public key, which signs
// the transaction fee.
ExcessSig string `json:"excess_sig"`
}
TxKernelV3 is a v3 tx kernel
type TxKernelV4 ¶
type TxKernelV4 struct {
// Options for a kernel's structure or use
Features core.KernelFeatures `json:"features"`
// Fee originally included in the transaction this proof is for.
Fee core.Uint64 `json:"fee"`
// This kernel is not valid earlier than lock_height blocks
// The max lock_height of all *inputs* to this transaction
LockHeight core.Uint64 `json:"lock_height"`
// Remainder of the sum of all transaction commitments. If the transaction
// is well formed, amounts components should sum to zero and the excess
// is hence a valid public key.
Excess string `json:"excess"`
// The signature proving the excess is a valid public key, which signs
// the transaction fee.
ExcessSig string `json:"excess_sig"`
}
TxKernelV4 is a v4 tx kernel
type VersionCompatInfoV3 ¶
type VersionCompatInfoV3 struct {
// The current version of the slate format
Version uint16 `json:"version"`
// Original version this slate was converted from
OrigVersion uint16 `json:"orig_version"`
// The grin block header version this slate is intended for
BlockHeaderVersion uint16 `json:"block_header_version"`
}
VersionCompatInfoV3 is a V3 version compat info
type VersionCompatInfoV4 ¶
type VersionCompatInfoV4 struct {
// The current version of the slate format
Version uint16 `json:"version"`
// The grin block header version this slate is intended for
BlockHeaderVersion uint16 `json:"block_header_version"`
}
VersionCompatInfoV4 is a V4 version compat info
func (VersionCompatInfoV4) MarshalJSON ¶
func (v VersionCompatInfoV4) MarshalJSON() ([]byte, error)
MarshalJSON marshals the VersionCompatInfoV4 as a quoted version like {}:{}
func (*VersionCompatInfoV4) UnmarshalJSON ¶
func (v *VersionCompatInfoV4) UnmarshalJSON(bs []byte) error
UnmarshalJSON unmarshals a quoted version to a VersionCompatInfoV4