transaction

package
v2.1.0-rc2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 11, 2020 License: MIT Imports: 15 Imported by: 16

Documentation

Overview

Transactions in Minter are RLP-encoded structures.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func BipToPip

func BipToPip(bip *big.Int) *big.Int

BipToPip converts BIP to PIP (multiplies input by 1e18)

func MultisigAddress

func MultisigAddress(owner string, nonce uint64) string

MultisigAddress returns multisig address created by the sender at the block height.

Types

type Address

type Address [20]byte

Address is address.

func (*Address) String

func (a *Address) String() string

String returns Address as string.

type Builder

type Builder struct {
	ChainID ChainID
}

Builder is creator of Transaction.

func NewBuilder

func NewBuilder(chainID ChainID) *Builder

NewBuilder returns new Builder for creating Transaction.

func (*Builder) NewTransaction

func (b *Builder) NewTransaction(data Data) (Interface, error)

NewTransaction returns new transaction with Data.

Example (SignMultiSignatureAddSignature)

You can collect all signatures in one place without revealing the private key.

package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
	"math/big"
)

func main() {
	data, _ := transaction.NewSendData().
		SetCoin(1).
		SetValue(transaction.BipToPip(big.NewInt(1))).
		SetTo("Mx1b685a7c1e78726c48f619c497a07ed75fe00483")

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)
	tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).SetSignatureType(transaction.SignatureTypeMulti)

	msigAddress := "Mx0023aa9371e0779189ef5a7434456fc21a938945"
	signedTx1, _ := tx.Clone().Sign(msigAddress, "ae089b32e4e0976ca6888cb1023148bd1a9f1cc28c5d442e52e586754ff48d63")
	signedTx2, _ := tx.Clone().Sign(msigAddress, "b0a65cd84d57189b70d80fe0b3d5fa3ea6e02fa48041314a587a1f8fdba703d7")
	signedTx3, _ := tx.Clone().Sign(msigAddress, "4c8dbfb3258f383adf656c2131e5ed77ec482a36125db71fb49d29e0528ff2ba")
	simpleSignatureData1, _ := signedTx1.SingleSignatureData()
	simpleSignatureData2, _ := signedTx2.SingleSignatureData()
	simpleSignatureData3, _ := signedTx3.SingleSignatureData()
	signedTransaction, _ := tx.Clone().Sign(msigAddress)
	signedTx123, _ := signedTransaction.AddSignature(simpleSignatureData1, simpleSignatureData2, simpleSignatureData3)

	encode, _ := signedTx123.Encode()
	fmt.Println(encode)
}
Output:

0xf901130102010101a0df01941b685a7c1e78726c48f619c497a07ed75fe00483880de0b6b3a7640000808002b8e8f8e6940023aa9371e0779189ef5a7434456fc21a938945f8cff8431ca07dd407fa5d2a161581d03cdeb7c94fcd5ade47d376af75f2c92d1483f821fe2ca00d16b6cdbceaadcd0fd72bd39ee17841871da333a571535fccfbcf6285881c2af8431ba07c2d063126024a1e19363e7e254312ca9ab37795b06102da25bd1c0dec81a934a043b7bec83db41c594ac7a8d416fca2f83f0e65ada1221fe659ba4dbe1f3c921af8431ba09318e56a242c39c10ce87ab51d10322cc62cf23885867bc89a24e8c3fa8483e9a04c82c1224d1b4efa7fba06623da2896745ce444d35ed77973759e6404b66bb95
Example (SignMultiSignature_dynamically_adding_private_keys)

You can transfer the transaction to the remaining addresses.

package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
	"math/big"
)

func main() {
	data, _ := transaction.NewSendData().
		SetCoin(1).
		SetValue(transaction.BipToPip(big.NewInt(1))).
		SetTo("Mx1b685a7c1e78726c48f619c497a07ed75fe00483")

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)
	tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).SetSignatureType(transaction.SignatureTypeMulti)

	msigAddress := "Mx0023aa9371e0779189ef5a7434456fc21a938945"
	signedTx1, _ := tx.Sign(
		msigAddress,
		"ae089b32e4e0976ca6888cb1023148bd1a9f1cc28c5d442e52e586754ff48d63",
	)
	signedTx2, _ := signedTx1.Sign(
		msigAddress,
		"b0a65cd84d57189b70d80fe0b3d5fa3ea6e02fa48041314a587a1f8fdba703d7",
	)
	signedTx3, _ := signedTx2.Sign(
		msigAddress,
		"4c8dbfb3258f383adf656c2131e5ed77ec482a36125db71fb49d29e0528ff2ba",
	)

	encode, _ := signedTx3.Encode()
	fmt.Println(encode)
}
Output:

0xf901130102010101a0df01941b685a7c1e78726c48f619c497a07ed75fe00483880de0b6b3a7640000808002b8e8f8e6940023aa9371e0779189ef5a7434456fc21a938945f8cff8431ca07dd407fa5d2a161581d03cdeb7c94fcd5ade47d376af75f2c92d1483f821fe2ca00d16b6cdbceaadcd0fd72bd39ee17841871da333a571535fccfbcf6285881c2af8431ba07c2d063126024a1e19363e7e254312ca9ab37795b06102da25bd1c0dec81a934a043b7bec83db41c594ac7a8d416fca2f83f0e65ada1221fe659ba4dbe1f3c921af8431ba09318e56a242c39c10ce87ab51d10322cc62cf23885867bc89a24e8c3fa8483e9a04c82c1224d1b4efa7fba06623da2896745ce444d35ed77973759e6404b66bb95
Example (SignMultiSignature_simultaneous_adding_private_keys)
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
	"math/big"
)

func main() {
	data, _ := transaction.NewSendData().
		SetCoin(1).
		SetValue(transaction.BipToPip(big.NewInt(1))).
		SetTo("Mx1b685a7c1e78726c48f619c497a07ed75fe00483")

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)

	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).SetSignatureType(transaction.SignatureTypeMulti).Sign(
		"Mxdb4f4b6942cb927e8d7e3a1f602d0f1fb43b5bd2",
		"ae089b32e4e0976ca6888cb1023148bd1a9f1cc28c5d442e52e586754ff48d63",
		"b0a65cd84d57189b70d80fe0b3d5fa3ea6e02fa48041314a587a1f8fdba703d7",
		"4c8dbfb3258f383adf656c2131e5ed77ec482a36125db71fb49d29e0528ff2ba",
	)

	encode, _ := signedTx.Encode()
	fmt.Println(encode)
	// Result: 0xf901130102010101a0df01941b685a7c1e78726c48f619c497a07ed75fe00483880de0b6b3a7640000808002b8e8f8e694db4f4b6942cb927e8d7e3a1f602d0f1fb43b5bd2f8cff8431ca07dd407fa5d2a161581d03cdeb7c94fcd5ade47d376af75f2c92d1483f821fe2ca00d16b6cdbceaadcd0fd72bd39ee17841871da333a571535fccfbcf6285881c2af8431ba07c2d063126024a1e19363e7e254312ca9ab37795b06102da25bd1c0dec81a934a043b7bec83db41c594ac7a8d416fca2f83f0e65ada1221fe659ba4dbe1f3c921af8431ba09318e56a242c39c10ce87ab51d10322cc62cf23885867bc89a24e8c3fa8483e9a04c82c1224d1b4efa7fba06623da2896745ce444d35ed77973759e6404b66bb95

}
Output:

0xf901130102010101a0df01941b685a7c1e78726c48f619c497a07ed75fe00483880de0b6b3a7640000808002b8e8f8e694db4f4b6942cb927e8d7e3a1f602d0f1fb43b5bd2f8cff8431ca07dd407fa5d2a161581d03cdeb7c94fcd5ade47d376af75f2c92d1483f821fe2ca00d16b6cdbceaadcd0fd72bd39ee17841871da333a571535fccfbcf6285881c2af8431ba07c2d063126024a1e19363e7e254312ca9ab37795b06102da25bd1c0dec81a934a043b7bec83db41c594ac7a8d416fca2f83f0e65ada1221fe659ba4dbe1f3c921af8431ba09318e56a242c39c10ce87ab51d10322cc62cf23885867bc89a24e8c3fa8483e9a04c82c1224d1b4efa7fba06623da2896745ce444d35ed77973759e6404b66bb95
Example (SignSingleSignature_simple)
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
	"math/big"
)

func main() {
	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(
		transaction.NewSendData().
			SetCoin(1).
			SetValue(transaction.BipToPip(big.NewInt(1))).
			MustSetTo("Mx1b685a7c1e78726c48f619c497a07ed75fe00483"),
	)

	signedTransaction, _ := tx.
		SetGasPrice(1).
		SetGasCoin(1).
		SetNonce(1).
		Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")

	senderAddress, _ := signedTransaction.SenderAddress()
	fmt.Println(senderAddress)

	fee := signedTransaction.Fee().String()
	fmt.Println(fee)

	hash, _ := signedTransaction.Hash()
	fmt.Println(hash)

	encode, _ := signedTransaction.Encode()
	fmt.Println(encode)

}
Output:

Mx622e1e0e788f4b1258f7e2a196f738c6a360c3de
10000000000000000
Mtec2166cced36276426360a79934fbf49f29f9e48e9d1f06ef4afc4f557aa3767
0xf8700102010101a0df01941b685a7c1e78726c48f619c497a07ed75fe00483880de0b6b3a7640000808001b845f8431ba0fffc3f503ace8a5d0c87efe50cf33ad41e3475459120d9c6fd75bd796b192313a0243d643a799e844ad82382d41cee98137a1d0c5888ff13951919e5e241ab89e0

type BuyCoinData

type BuyCoinData struct {
	CoinToBuy          CoinID   // ID of a coin to get
	ValueToBuy         *big.Int // Amount of CoinToBuy to get
	CoinToSell         CoinID   // ID of a coin to give
	MaximumValueToSell *big.Int // Maximum value of coins to sell
}

BuyCoinData is a Data of Transaction for buy a coin paying another coin (owned by sender).

func NewBuyCoinData

func NewBuyCoinData() *BuyCoinData

NewBuyCoinData returns new data of transaction for buy a coin paying another coin (owned by sender).

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
	"math/big"
)

func main() {
	data := transaction.NewBuyCoinData().
		SetCoinToBuy(2).
		SetValueToBuy(transaction.BipToPip(big.NewInt(1))).
		SetCoinToSell(1).
		SetMaximumValueToSell(transaction.BipToPip(big.NewInt(1)))

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)

	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf865010201010495d402880de0b6b3a764000001880de0b6b3a7640000808001b845f8431ca0ad334ececd68741f1f9b96e15a2b5d6a7fe6c378cdaab6c6e8947541e1af74dda038c829477eb261948598fd3dd039aba41aa5691f50d3ee2bb4125bc38b294725

func (*BuyCoinData) Encode

func (d *BuyCoinData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*BuyCoinData) Fee

func (d *BuyCoinData) Fee() Fee

Fee returns commission of transaction Data

func (*BuyCoinData) SetCoinToBuy

func (d *BuyCoinData) SetCoinToBuy(id uint64) *BuyCoinData

SetCoinToBuy sets ID of a coin to give.

func (*BuyCoinData) SetCoinToSell

func (d *BuyCoinData) SetCoinToSell(id uint64) *BuyCoinData

SetCoinToSell sets ID of a coin to get.

func (*BuyCoinData) SetMaximumValueToSell

func (d *BuyCoinData) SetMaximumValueToSell(value *big.Int) *BuyCoinData

SetMaximumValueToSell sets maximum value of coins to sell.

func (*BuyCoinData) SetValueToBuy

func (d *BuyCoinData) SetValueToBuy(value *big.Int) *BuyCoinData

SetValueToBuy sets amount of CoinToBuy to get.

func (*BuyCoinData) Type

func (d *BuyCoinData) Type() Type

Type returns Data type of the transaction.

type ChainID

type ChainID byte

ChainID is network identifier (1 - MainNetChainID, 2 - TestNetChainID)

const (
	MainNetChainID ChainID // 0x01
	TestNetChainID         // 0x02
)

Variants of ChainID

type Check

type Check struct {
	*CheckData
	// contains filtered or unexported fields
}

func NewCheck

func NewCheck(nonce string, chainID ChainID, dueBlock uint64, coin CoinID, value *big.Int, gasCoin CoinID) *Check

NewCheck issues a check that will later be redeemed by the person of your choice.

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
	"math/big"
)

func main() {
	check := transaction.NewCheck(
		"480",
		transaction.TestNetChainID,
		999999,
		1,
		transaction.BipToPip(big.NewInt(10)),
		1,
	).SetPassphrase("pass")

	sign, _ := check.Sign("64e27afaab363f21eec05291084367f6f1297a7b280d69d672febecda94a09ea")
	encode, _ := sign.Encode()
	fmt.Println(encode)
}
Output:

Mcf89a8334383002830f423f01888ac7230489e8000001b841ea3d022c8326965556f1b651b14d3124947b8683f7b3ab56fca06e0b4204757b2a11dace85d0139ce4e8fdb18369d07905e733683b8229f41bc216c784b4d714011ca017bffff4b3f431dc938239cd2727f0c1dfa61ccdc98727fa8e9baf608b3755f5a05b768c53d09c5e9517487820df439f496e16e459862e7d449360ce69a2ccc4d6

func (*Check) Encode

func (check *Check) Encode() (string, error)

Encode returns string representation of Check. Checks are prefixed with "Mc". RLP-encoded structure in hex format.

func (*Check) EncodeBase64

func (check *Check) EncodeBase64() (string, error)

EncodeBase64 returns string representation of Check. RLP-encoded structure in base64 format.

func (*Check) SetPassphrase

func (check *Check) SetPassphrase(passphrase string) *Check

SetPassphrase sets secret phrase which you will pass to receiver of the check

func (*Check) Sign

func (check *Check) Sign(prKey string) (encodeInterface, error)

Sign signs Check with private key

type CheckAddress

type CheckAddress struct {
	// contains filtered or unexported fields
}

func NewCheckAddress

func NewCheckAddress(address string, passphrase string) (*CheckAddress, error)

func (*CheckAddress) Proof

func (check *CheckAddress) Proof() (string, error)

Proof Check

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
)

func main() {
	check, _ := transaction.NewCheckAddress("Mxa7bc33954f1ce855ed1a8c768fdd32ed927def47", "pass")
	proof, _ := check.Proof()
	fmt.Println(proof)
}
Output:

da021d4f84728e0d3d312a18ec84c21768e0caa12a53cb0a1452771f72b0d1a91770ae139fd6c23bcf8cec50f5f2e733eabb8482cf29ee540e56c6639aac469600

type CheckData

type CheckData struct {
	Nonce    []byte   // Unique ID of the check
	ChainID  ChainID  // ID of the network
	DueBlock uint64   // Defines last block height in which the check can be used
	Coin     CoinID   // ID of coin
	Value    *big.Int // Amount of coins
	GasCoin  CoinID   // ID of a coin to pay fee
	Lock     *big.Int // Secret to prevent hijacking
	V        *big.Int // V signature of issuer
	R        *big.Int // R signature of issuer
	S        *big.Int // S signature of issuer
}

CheckData is like an ordinary bank check. Each user of network can issue check with any amount of coins and pass it to another person. Receiver will be able to cash a check from arbitrary account.

func DecodeCheck

func DecodeCheck(check string) (*CheckData, error)

DecodeCheck returns CheckData from RLP-encoded structure in hex format.

Example
package main

import (
	"encoding/hex"
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
)

func main() {
	data, err := transaction.DecodeCheck("Mcf89a8334383002830f423f01888ac7230489e8000001b841ea3d022c8326965556f1b651b14d3124947b8683f7b3ab56fca06e0b4204757b2a11dace85d0139ce4e8fdb18369d07905e733683b8229f41bc216c784b4d714011ca017bffff4b3f431dc938239cd2727f0c1dfa61ccdc98727fa8e9baf608b3755f5a05b768c53d09c5e9517487820df439f496e16e459862e7d449360ce69a2ccc4d6")
	if err != nil {
		return
	}

	fmt.Println(string(data.Nonce))
	// Result: 480

	fmt.Println(data.ChainID)
	// Result: 2

	fmt.Println(data.Coin.String())
	// Result: MNT

	fmt.Println(data.DueBlock)
	// Result: 999999

	fmt.Println(data.Value.String())
	// Result: 10000000000000000000

	fmt.Println(data.Lock.String())
	// Result: 985283871505876742053353384809055983203325304659217336382177168476233943196356552072809135181493031263037291805582875144952622907359402361966594748392133888

	fmt.Println(data.V.Int64())
	// Result: 27

	fmt.Println(hex.EncodeToString(data.R.Bytes()))
	// Result: 83c9945169f0a7bbe596973b32dc887608780580b1d3bc7b188bedb3bd385594

	fmt.Println(hex.EncodeToString(data.S.Bytes()))
	// Result: 47b2d5345946ed5498f5bee713f86276aac046a5fef820beaee77a9b6f9bc1df

	sender := data.MustSender()
	fmt.Println(sender)
	// Result: Mxce931863b9c94a526d94acd8090c1c5955a6eb4b

}
Output:

480
2
1
999999
10000000000000000000
3140622329586495619178957840119431069413669815577585079847850638320450546439777094725740545888163635015645563228183373665216451470665191568503369618620355585
28
17bffff4b3f431dc938239cd2727f0c1dfa61ccdc98727fa8e9baf608b3755f5
5b768c53d09c5e9517487820df439f496e16e459862e7d449360ce69a2ccc4d6
Mxce931863b9c94a526d94acd8090c1c5955a6eb4b

func DecodeCheckBase64

func DecodeCheckBase64(rawCheck string) (*CheckData, error)

DecodeCheckBase64 returns CheckData from RLP-encoded structure in base64 format.

func (*CheckData) MustSender

func (check *CheckData) MustSender() string

MustSender tries to return sender of transaction and panics on error.

func (*CheckData) PublicKey

func (check *CheckData) PublicKey() (string, error)

PublicKey returns public key from transaction signature.

func (*CheckData) Sender

func (check *CheckData) Sender() (string, error)

Sender returns sender of CheckDat from transaction signature.

type CoinID

type CoinID uint32

CoinID ID of a coin.

func (*CoinID) String

func (c *CoinID) String() string

String return CoinID as string.

type CoinSymbol

type CoinSymbol [10]byte

CoinSymbol is symbol of a coin.

func (*CoinSymbol) String

func (s *CoinSymbol) String() string

String returns CoinSymbol as string.

type CreateCoinData

type CreateCoinData struct {
	Name                 string     // Name of a coin
	Symbol               CoinSymbol // Symbol of a coin. Must be unique, alphabetic, uppercase, 3 to 10 symbols length
	InitialAmount        *big.Int   // Amount of coins to issue. Issued coins will be available to sender account. Should be between 1 and 1,000,000,000,000,000 coins.
	InitialReserve       *big.Int   // Initial reserve in BIP's
	ConstantReserveRatio uint32     // ConstantReserveRatio (CRR), should be from 10 to 100.
	MaxSupply            *big.Int   // Max amount of coins that are allowed to be issued. Maximum is 1,000,000,000,000,000
}

CreateCoinData is a Data of Transaction for creating new coin.

func NewCreateCoinData

func NewCreateCoinData() *CreateCoinData

NewCreateCoinData returns new CreateCoinData of Transaction for creating new coin.

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
	"math/big"
)

func main() {
	data := transaction.NewCreateCoinData().
		SetName("SUPER TEST").
		SetSymbol("SPRTEST").
		SetInitialAmount(transaction.BipToPip(big.NewInt(100))).
		SetInitialReserve(transaction.BipToPip(big.NewInt(20000))).
		SetConstantReserveRatio(10).
		SetMaxSupply(transaction.BipToPip(big.NewInt(1000)))

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)

	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)

}
Output:

0xf8870102010105b7f68a535550455220544553548a5350525445535400000089056bc75e2d631000008a043c33c19375648000000a893635c9adc5dea00000808001b845f8431ba034615f080a026ee579395aeb4c2eac974a14c091f1bb112629b2b5be0a82628da07f3347c71fa0668d01126dfae49d2b402067275878e4ffd26fd42a73cdf01950

func (*CreateCoinData) Encode

func (d *CreateCoinData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*CreateCoinData) Fee

func (d *CreateCoinData) Fee() Fee

Fee returns commission of transaction Data

func (*CreateCoinData) SetConstantReserveRatio

func (d *CreateCoinData) SetConstantReserveRatio(ratio uint32) *CreateCoinData

SetConstantReserveRatio sets CRR, uint, should be from 10 to 100.

func (*CreateCoinData) SetInitialAmount

func (d *CreateCoinData) SetInitialAmount(value *big.Int) *CreateCoinData

SetInitialAmount sets amount of coins to issue. Issued coins will be available to sender account.

func (*CreateCoinData) SetInitialReserve

func (d *CreateCoinData) SetInitialReserve(value *big.Int) *CreateCoinData

SetInitialReserve sets initial reserve in BIP's.

func (*CreateCoinData) SetMaxSupply

func (d *CreateCoinData) SetMaxSupply(maxSupply *big.Int) *CreateCoinData

SetMaxSupply sets maximum amount of coins that are allowed to be issued.

func (*CreateCoinData) SetName

func (d *CreateCoinData) SetName(name string) *CreateCoinData

SetName sets name of a coin. Arbitrary string up to 64 letters length.

func (*CreateCoinData) SetSymbol

func (d *CreateCoinData) SetSymbol(symbol string) *CreateCoinData

SetSymbol sets symbol of a coin. Must be unique, alphabetic, uppercase, 3 to 10 symbols length.

func (*CreateCoinData) Type

func (d *CreateCoinData) Type() Type

Type returns Data type of the transaction.

type CreateMultisigData

type CreateMultisigData struct {
	Threshold uint32    // Threshold for the sums of signature weights.
	Weights   []uint32  // Weights of signers
	Addresses []Address // List of signed addresses
}

CreateMultisigData is a Data of Transaction for creating multisig wallet.

func NewCreateMultisigData

func NewCreateMultisigData() *CreateMultisigData

NewCreateMultisigData returns new CreateMultisigData of Transaction for creating multisig wallet.

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
)

func main() {
	data := transaction.NewCreateMultisigData().
		MustAddSigData("Mx08d920c5d93dbf23038fe1a54bbb34f41f77677c", 1).
		MustAddSigData("Mx772fd5bd06356250e5efe572b6ae615860ee0c17", 3).
		MustAddSigData("Mx9c7f68ff71b5819c41e8f87cc99bdf6359da3d75", 5).
		SetThreshold(7)

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)

	signedTx, _ := tx.
		SetNonce(11).
		SetGasPrice(1).
		SetGasCoin(1).
		SetSignatureType(transaction.SignatureTypeSingle).
		Sign("ae089b32e4e0976ca6888cb1023148bd1a9f1cc28c5d442e52e586754ff48d63")

	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
	// Result: 0xf8990b0201010cb848f84607c3010305f83f9408d920c5d93dbf23038fe1a54bbb34f41f77677c94772fd5bd06356250e5efe572b6ae615860ee0c17949c7f68ff71b5819c41e8f87cc99bdf6359da3d75808001b845f8431ba0dfc662df298edef48a1a9623a735b55b3acd32023c24a40efc90a85d37209d04a06c2bcd518c2e47ac102941776a68f3ada206260828354e76e2080396bf18f2b1

}
Output:

0xf8990b0201010cb848f84607c3010305f83f9408d920c5d93dbf23038fe1a54bbb34f41f77677c94772fd5bd06356250e5efe572b6ae615860ee0c17949c7f68ff71b5819c41e8f87cc99bdf6359da3d75808001b845f8431ba0dfc662df298edef48a1a9623a735b55b3acd32023c24a40efc90a85d37209d04a06c2bcd518c2e47ac102941776a68f3ada206260828354e76e2080396bf18f2b1

func (*CreateMultisigData) AddSigData

func (d *CreateMultisigData) AddSigData(address string, weight uint32) (*CreateMultisigData, error)

AddSigData sets a set of signers with appropriate weights.

func (*CreateMultisigData) Encode

func (d *CreateMultisigData) Encode() ([]byte, error)

func (*CreateMultisigData) Fee

func (d *CreateMultisigData) Fee() Fee

Fee returns commission of transaction Data

func (*CreateMultisigData) MustAddSigData

func (d *CreateMultisigData) MustAddSigData(address string, weight uint32) *CreateMultisigData

MustAddSigData tries to set a set of signers with appropriate weights and panics on error.

func (*CreateMultisigData) SetThreshold

func (d *CreateMultisigData) SetThreshold(threshold uint32) *CreateMultisigData

SetThreshold sets threshold for the sums of signature weights.

func (*CreateMultisigData) Type

func (d *CreateMultisigData) Type() Type

Type returns Data type of the transaction.

type Data

type Data interface {
	// Encode returns the byte representation of a transaction Data.
	Encode() ([]byte, error)
	// Type returns Data type of the transaction.
	Type() Type
	// Fee returns commission of transaction Data
	Fee() Fee
}

Data is data of transaction

type DeclareCandidacyData

type DeclareCandidacyData struct {
	Address    Address   // Address of candidate
	PubKey     PublicKey // Public key of a validator
	Commission uint32    // Commission (from 0 to 100) from rewards which delegators will pay to validator
	Coin       CoinID    // ID of coin to stake
	Stake      *big.Int  // Amount of coins to stake
}

DeclareCandidacyData is a Data of Transaction for declaring new validator candidacy.

func NewDeclareCandidacyData

func NewDeclareCandidacyData() *DeclareCandidacyData

NewDeclareCandidacyData returns new DeclareCandidacyData of Transaction for declaring new validator candidacy.

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
	"math/big"
)

func main() {
	data := transaction.NewDeclareCandidacyData().
		MustSetPubKey("Mp0eb98ea04ae466d8d38f490db3c99b3996a90e24243952ce9822c6dc1e2c1a43").
		SetCommission(10).
		SetCoin(1).
		SetStake(transaction.BipToPip(big.NewInt(5))).
		MustSetAddress("Mx9f7fd953c2c69044b901426831ed03ee0bd0597a")

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)

	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf8940102010106b843f841949f7fd953c2c69044b901426831ed03ee0bd0597aa00eb98ea04ae466d8d38f490db3c99b3996a90e24243952ce9822c6dc1e2c1a430a01884563918244f40000808001b845f8431ba05c5650c040fbce0d4a923a5b0b7fdd4bf52156736a50e7bc1b175a4cbed68c60a07dd76883673bd41fa1293dc38313ec5288dd23c67281f851a67e83fcb917faa7

func (*DeclareCandidacyData) Encode

func (d *DeclareCandidacyData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*DeclareCandidacyData) Fee

func (d *DeclareCandidacyData) Fee() Fee

Fee returns commission of transaction Data

func (*DeclareCandidacyData) MustSetAddress

func (d *DeclareCandidacyData) MustSetAddress(address string) *DeclareCandidacyData

MustSetAddress tries to set address of candidate and panics on error.

func (*DeclareCandidacyData) MustSetPubKey

func (d *DeclareCandidacyData) MustSetPubKey(key string) *DeclareCandidacyData

MustSetPubKey tries to set public key of validator and panics on error.

func (*DeclareCandidacyData) SetAddress

func (d *DeclareCandidacyData) SetAddress(address string) (*DeclareCandidacyData, error)

SetAddress sets address of candidate. This address would be able to control candidate. Also all rewards will be sent to this address

func (*DeclareCandidacyData) SetCoin

SetCoin sets ID of coin to stake.

func (*DeclareCandidacyData) SetCommission

func (d *DeclareCandidacyData) SetCommission(value uint32) *DeclareCandidacyData

SetCommission sets commission (from 0 to 100) from rewards which delegators will pay to validator.

func (*DeclareCandidacyData) SetPubKey

func (d *DeclareCandidacyData) SetPubKey(key string) (*DeclareCandidacyData, error)

SetPubKey sets public key of a validator.

func (*DeclareCandidacyData) SetStake

func (d *DeclareCandidacyData) SetStake(value *big.Int) *DeclareCandidacyData

SetStake sets amount of coins to stake.

func (*DeclareCandidacyData) Type

func (d *DeclareCandidacyData) Type() Type

Type returns Data type of the transaction.

type DeepLink struct {
	Type     Type    // type of transaction
	Data     []byte  // data of transaction (depends on transaction type)
	Payload  []byte  // optional, arbitrary user-defined bytes
	Nonce    *uint32 `rlp:"nilList"` // optional, used for prevent transaction reply
	GasPrice *uint32 `rlp:"nilList"` // optional, fee multiplier, should be equal or greater than current mempool min gas price
	GasCoin  *CoinID `rlp:"nilList"` // optional, ID of a coin to pay fee, right padded with zeros
}
func NewDeepLink(data Data) (*DeepLink, error)
func (d *DeepLink) CreateLink(pass string) (string, error)

Returns url link.

func (*DeepLink) Encode

func (d *DeepLink) Encode() (string, error)

Returns tx-like data. RLP-encoded structure in base64url format.

func (*DeepLink) SetGasCoin

func (d *DeepLink) SetGasCoin(id uint64) *DeepLink

Set ID of a coin to pay fee

func (*DeepLink) SetGasPrice

func (d *DeepLink) SetGasPrice(gasPrice uint32) *DeepLink

Set fee multiplier.

func (*DeepLink) SetNonce

func (d *DeepLink) SetNonce(nonce uint32) *DeepLink

Set nonce of transaction

func (*DeepLink) SetPayload

func (d *DeepLink) SetPayload(payload []byte) *DeepLink

Set arbitrary user-defined bytes

type DelegateData

type DelegateData struct {
	PubKey PublicKey // Public key of a validator
	Coin   CoinID    // ID of coin to stake
	Value  *big.Int  // Amount of coins to stake
}

DelegateData is a Data of Transaction for delegating funds to validator.

func NewDelegateData

func NewDelegateData() *DelegateData

NewDelegateData returns new DelegateData of Transaction for delegating funds to validator

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
	"math/big"
)

func main() {
	data := transaction.NewDelegateData().
		MustSetPubKey("Mp0eb98ea04ae466d8d38f490db3c99b3996a90e24243952ce9822c6dc1e2c1a43").
		SetCoin(1).
		SetValue(transaction.BipToPip(big.NewInt(10)))

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)
	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
	// Result: 0xf87c0102010107aceba00eb98ea04ae466d8d38f490db3c99b3996a90e24243952ce9822c6dc1e2c1a4301888ac7230489e80000808001b845f8431ca016bed99d271578829200f5c7c8f2f04dbf242b1d2c4ed4676c6f3480ade1f6a3a0677cac19e1a36367358cdeeed4a66aa135615b41206f502b9284239539084b5a

}
Output:

0xf87c0102010107aceba00eb98ea04ae466d8d38f490db3c99b3996a90e24243952ce9822c6dc1e2c1a4301888ac7230489e80000808001b845f8431ca016bed99d271578829200f5c7c8f2f04dbf242b1d2c4ed4676c6f3480ade1f6a3a0677cac19e1a36367358cdeeed4a66aa135615b41206f502b9284239539084b5a

func (*DelegateData) Encode

func (d *DelegateData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*DelegateData) Fee

func (d *DelegateData) Fee() Fee

Fee returns commission of transaction Data

func (*DelegateData) MustSetPubKey

func (d *DelegateData) MustSetPubKey(key string) *DelegateData

MustSetPubKey tries to set public key of validator and panics on error.

func (*DelegateData) SetCoin

func (d *DelegateData) SetCoin(id uint64) *DelegateData

SetCoin sets ID of coin to stake.

func (*DelegateData) SetPubKey

func (d *DelegateData) SetPubKey(key string) (*DelegateData, error)

SetPubKey sets public key of a validator.

func (*DelegateData) SetValue

func (d *DelegateData) SetValue(value *big.Int) *DelegateData

SetValue sets amount of coins to stake.

func (*DelegateData) Type

func (d *DelegateData) Type() Type

Type returns Data type of the transaction.

type EditCandidateData

type EditCandidateData struct {
	PubKey         PublicKey // Public key of a validator
	RewardAddress  Address   // Address where validator’s rewards go to.
	OwnerAddress   Address   // Address that allows one to start the validator by sending the SetCandidateOnline transaction or stop it by sending the SetCandidateOffline transaction. It also enables the owner to edit the node by sending EditCandidate.
	ControlAddress Address   // Address that allows one to start the validator by sending the SetCandidateOnline transaction or stop it by sending the SetCandidateOffline transaction.
}

EditCandidateData is Data of Transaction for editing existing candidate. This transaction should be sent from OwnerAddress which is set in the "Declare candidacy transaction".

func NewEditCandidateData

func NewEditCandidateData() *EditCandidateData

NewEditCandidateData returns new EditCandidateData of Transaction for editing existing candidate.

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
)

func main() {
	data := transaction.NewEditCandidateData().
		MustSetPubKey("Mp4ae1ee73e6136c85b0ca933a9a1347758a334885f10b3238398a67ac2eb153b8").
		MustSetOwnerAddress("Mxe731fcddd37bb6e72286597d22516c8ba3ddffa0").
		MustSetRewardAddress("Mx89e5dc185e6bab772ac8e00cf3fb3f4cb0931c47").
		MustSetControlAddress("Mx1b685a7c1e78726c48f619c497a07ed75fe00483")

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)

	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf8b3010201010eb862f860a04ae1ee73e6136c85b0ca933a9a1347758a334885f10b3238398a67ac2eb153b89489e5dc185e6bab772ac8e00cf3fb3f4cb0931c4794e731fcddd37bb6e72286597d22516c8ba3ddffa0941b685a7c1e78726c48f619c497a07ed75fe00483808001b845f8431ca07e6ea59db677f322752f0c62b867b8fd35db69124849c5c6eb037850031f3781a04f14493da1f218205935835b14d9ccca77614d51547a3196a94778ff6f69ee7d

func (*EditCandidateData) Encode

func (d *EditCandidateData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*EditCandidateData) Fee

func (d *EditCandidateData) Fee() Fee

Fee returns commission of transaction Data

func (*EditCandidateData) MustSetControlAddress

func (d *EditCandidateData) MustSetControlAddress(address string) *EditCandidateData

MustSetControlAddress tries to set control address of validator and panics on error.

func (*EditCandidateData) MustSetOwnerAddress

func (d *EditCandidateData) MustSetOwnerAddress(address string) *EditCandidateData

MustSetOwnerAddress tries to set owner address of validator and panics on error.

func (*EditCandidateData) MustSetPubKey

func (d *EditCandidateData) MustSetPubKey(key string) *EditCandidateData

MustSetPubKey tries to set public key of validator and panics on error.

func (*EditCandidateData) MustSetRewardAddress

func (d *EditCandidateData) MustSetRewardAddress(address string) *EditCandidateData

MustSetRewardAddress tries to set reward address of validator and panics on error.

func (*EditCandidateData) SetControlAddress

func (d *EditCandidateData) SetControlAddress(address string) (*EditCandidateData, error)

SetControlAddress sets address for managing SetCandidateOnline and SetCandidateOffline data of transaction

func (*EditCandidateData) SetOwnerAddress

func (d *EditCandidateData) SetOwnerAddress(address string) (*EditCandidateData, error)

SetOwnerAddress sets address for managing SetCandidateOnline, SetCandidateOffline and EditCandidate data of transaction

func (*EditCandidateData) SetPubKey

func (d *EditCandidateData) SetPubKey(key string) (*EditCandidateData, error)

SetPubKey sets public key of a validator.

func (*EditCandidateData) SetRewardAddress

func (d *EditCandidateData) SetRewardAddress(address string) (*EditCandidateData, error)

SetRewardAddress sets address where validator’s rewards go to.

func (*EditCandidateData) Type

func (d *EditCandidateData) Type() Type

Type returns Data type of the transaction.

type EditCandidatePublicKeyData

type EditCandidatePublicKeyData struct {
	PubKey    PublicKey // Public key of a validator
	NewPubKey PublicKey // New public key for change.
}

EditCandidatePublicKeyData is Data of Transaction for editing candidate public key. This transaction should be sent from OwnerAddress which is set in the "Declare candidacy transaction".

func NewEditCandidatePublicKeyData

func NewEditCandidatePublicKeyData() *EditCandidatePublicKeyData

NewEditCandidatePublicKeyData returns new EditCandidatePublicKeyData of Transaction for editing existing candidate.

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
)

func main() {
	data := transaction.NewEditCandidatePublicKeyData().
		MustSetPubKey("Mp4ae1ee73e6136c85b0ca933a9a1347758a334885f10b3238398a67ac2eb153b8").
		MustSetNewPubKey("Mp0eb98ea04ae466d8d38f490db3c99b3996a90e24243952ce9822c6dc1e2c1a43")

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)

	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf8950102010114b844f842a04ae1ee73e6136c85b0ca933a9a1347758a334885f10b3238398a67ac2eb153b8a00eb98ea04ae466d8d38f490db3c99b3996a90e24243952ce9822c6dc1e2c1a43808001b845f8431ba0933744d45b17ee431460ce6ce9a707e84f7c43b79bd7eb2067bc35352035e141a07731ab3e52be64a41482409ee3d92f6662e2e6d36ad6789c69fb1d4ec75e766f

func (*EditCandidatePublicKeyData) Encode

func (d *EditCandidatePublicKeyData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*EditCandidatePublicKeyData) Fee

Fee returns commission of transaction Data

func (*EditCandidatePublicKeyData) MustSetNewPubKey

MustSetNewPubKey tries to set new public key and panics on error.

func (*EditCandidatePublicKeyData) MustSetPubKey

MustSetPubKey tries to set public key of validator and panics on error.

func (*EditCandidatePublicKeyData) SetNewPubKey

SetNewPubKey sets new public key for change.

func (*EditCandidatePublicKeyData) SetPubKey

SetPubKey sets public key of a validator.

func (*EditCandidatePublicKeyData) Type

func (d *EditCandidatePublicKeyData) Type() Type

Type returns Data type of the transaction.

type EditCoinOwnerData

type EditCoinOwnerData struct {
	Symbol   CoinSymbol
	NewOwner Address
}

EditCoinOwnerData is a Data of Transaction for editing coin owner.

func NewEditCoinOwnerData

func NewEditCoinOwnerData() *EditCoinOwnerData

NewEditCoinOwnerData returns new EditCoinOwnerData of Transaction for editing coin owner.

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
)

func main() {
	data := transaction.NewEditCoinOwnerData().
		SetSymbol("SPRTEST").
		MustSetNewOwner("Mx89e5dc185e6bab772ac8e00cf3fb3f4cb0931c47")

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)

	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf8710102010111a1e08a535052544553540000009489e5dc185e6bab772ac8e00cf3fb3f4cb0931c47808001b845f8431ba03a08817c5b87aaa4eed6ed0c0a86270bbeb0a9f309453ef996546cbee383e8a0a01d34934dba2d1cb07740156d5af8a9e37b68524fd57e4eca1218d12854350f97

func (*EditCoinOwnerData) Encode

func (d *EditCoinOwnerData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*EditCoinOwnerData) Fee

func (d *EditCoinOwnerData) Fee() Fee

Fee returns commission of transaction Data

func (*EditCoinOwnerData) MustSetNewOwner

func (d *EditCoinOwnerData) MustSetNewOwner(address string) *EditCoinOwnerData

MustSetNewOwner tries to set address of candidate and panics on error.

func (*EditCoinOwnerData) SetNewOwner

func (d *EditCoinOwnerData) SetNewOwner(address string) (*EditCoinOwnerData, error)

SetNewOwner sets new owner address of a coin.

func (*EditCoinOwnerData) SetSymbol

func (d *EditCoinOwnerData) SetSymbol(symbol string) *EditCoinOwnerData

SetSymbol sets symbol of a coin.

func (*EditCoinOwnerData) Type

func (d *EditCoinOwnerData) Type() Type

Type returns Data type of the transaction.

type EditMultisigData

type EditMultisigData struct {
	Threshold uint32    // Threshold for the sums of signature weights.
	Weights   []uint32  // Weights of signers
	Addresses []Address // List of signed addresses
}

EditMultisigData is a Data of Transaction for editing multisig address.

func NewEditMultisigData

func NewEditMultisigData() *EditMultisigData

NewEditMultisigData returns new EditMultisigData of Transaction for editing multisig address.

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
)

func main() {
	data := transaction.NewEditMultisigData().
		MustAddSigData("Mx08d920c5d93dbf23038fe1a54bbb34f41f77677c", 1).
		MustAddSigData("Mx772fd5bd06356250e5efe572b6ae615860ee0c17", 3).
		MustAddSigData("Mx9c7f68ff71b5819c41e8f87cc99bdf6359da3d75", 5).
		SetThreshold(7)

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)

	signedTx, _ := tx.
		SetNonce(11).
		SetGasPrice(1).
		SetGasCoin(1).
		SetSignatureType(transaction.SignatureTypeMulti).
		Sign(transaction.MultisigAddress("Mx9c7f68ff71b5819c41e8f87cc99bdf6359da3d75", 21), "ae089b32e4e0976ca6888cb1023148bd1a9f1cc28c5d442e52e586754ff48d63")

	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf8b20b02010112b848f84607c3010305f83f9408d920c5d93dbf23038fe1a54bbb34f41f77677c94772fd5bd06356250e5efe572b6ae615860ee0c17949c7f68ff71b5819c41e8f87cc99bdf6359da3d75808002b85ef85c94f954480762e2cb5cfed7ab85a75e9692b6a138aaf845f8431ca0ebf73833cbf3ff51a9adb013834af1bbd383e3a90ced0bd41a9988f54fd84071a02dad3b6fe991507e59cf8643e1b243c760a6af8f6e6e9264514d3c2b50cc384e

func (*EditMultisigData) AddSigData

func (d *EditMultisigData) AddSigData(address string, weight uint32) (*EditMultisigData, error)

AddSigData sets a set of signers with appropriate weights.

func (*EditMultisigData) Encode

func (d *EditMultisigData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*EditMultisigData) Fee

func (d *EditMultisigData) Fee() Fee

Fee returns commission of transaction Data

func (*EditMultisigData) MustAddSigData

func (d *EditMultisigData) MustAddSigData(address string, weight uint32) *EditMultisigData

MustAddSigData tries to set a set of signers with appropriate weights and panics on error.

func (*EditMultisigData) SetThreshold

func (d *EditMultisigData) SetThreshold(threshold uint32) *EditMultisigData

SetThreshold sets threshold for the sums of signature weights.

func (*EditMultisigData) Type

func (d *EditMultisigData) Type() Type

Type returns Data type of the transaction.

type Fee

type Fee uint

Fee is the commission that the sender must pay for sending the transaction. Fees are measured in "units". Also sender should pay extra 2 units per byte in Payload and ServiceData fields.

type Interface

type Interface interface {

	// SetSignatureType sets signature type.
	SetSignatureType(signatureType SignatureType) Interface
	// SetMultiSignatureType sets signature type to SignatureTypeMulti.
	SetMultiSignatureType() Interface
	// SetNonce sets nonce of transaction.
	SetNonce(nonce uint64) Interface
	// SetGasCoin sets ID of a coin to pay fee.
	SetGasCoin(id uint64) Interface
	// SetGasPrice sets fee multiplier.
	SetGasPrice(price uint8) Interface
	// SetPayload sets arbitrary user-defined bytes.
	SetPayload(payload []byte) Interface
	// SetServiceData sets ServiceData field.
	SetServiceData(serviceData []byte) Interface
	// Sign signs transaction with a private key.
	Sign(key string, prKeys ...string) (Signed, error)
	// Clone returns copy of the transaction.
	Clone() Interface
	// contains filtered or unexported methods
}

Interface is Transaction data installer.

type MultisendData

type MultisendData struct {
	List []*SendData // List of SendData
}

MultisendData is a Data of Transaction for sending coins to multiple addresses.

func NewMultisendData

func NewMultisendData() *MultisendData

NewMultisendData returns new MultisendData of Transaction for sending coins to multiple addresses

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
	"math/big"
)

func main() {
	data := transaction.NewMultisendData().AddItem(
		transaction.NewSendData().
			SetCoin(1).
			SetValue(big.NewInt(0).Mul(big.NewInt(1), big.NewInt(0).Exp(big.NewInt(10), big.NewInt(18-1), nil))).
			MustSetTo("Mxfe60014a6e9ac91618f5d1cab3fd58cded61ee99"),
	).AddItem(
		transaction.NewSendData().
			SetCoin(1).
			SetValue(big.NewInt(0).Mul(big.NewInt(2), big.NewInt(0).Exp(big.NewInt(10), big.NewInt(18-1), nil))).
			MustSetTo("Mxddab6281766ad86497741ff91b6b48fe85012e3c"),
	)

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)
	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf895010201010db844f842f840df0194fe60014a6e9ac91618f5d1cab3fd58cded61ee9988016345785d8a0000df0194ddab6281766ad86497741ff91b6b48fe85012e3c8802c68af0bb140000808001b845f8431ba0718f10b4468989919adabd215f5a6e83bd70eb1358d725541c2661122f66350ba05ab9e5e28107612f89ce56f4d7846edcbf272e8929eaf0c7c945e2530f40b667

func (*MultisendData) AddItem

func (d *MultisendData) AddItem(item *SendData) *MultisendData

AddItem adds SendData to Multisend list

func (*MultisendData) Encode

func (d *MultisendData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*MultisendData) Fee

func (d *MultisendData) Fee() Fee

Fee returns commission of transaction Data

func (*MultisendData) Type

func (d *MultisendData) Type() Type

Type returns Data type of the transaction.

type PriceVoteData

type PriceVoteData struct {
	Price uint
}

PriceVoteData is a Data of Transaction for

func NewPriceVoteData

func NewPriceVoteData() *PriceVoteData

NewPriceVoteData returns new PriceVoteData of Transaction for

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
)

func main() {
	data := transaction.NewPriceVoteData().
		SetPrice(1)

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)

	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf852010201011382c101808001b845f8431ba00e6ceba5074a56661daf2099872627973e9ee09f82519893a1fda16717b4eec1a00664a550774a27d6f6a56c58d53d39ff46719ddd53423a371339314a65857196

func (*PriceVoteData) Encode

func (d *PriceVoteData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*PriceVoteData) Fee

func (d *PriceVoteData) Fee() Fee

Fee returns commission of transaction Data

func (*PriceVoteData) SetPrice

func (d *PriceVoteData) SetPrice(price uint) *PriceVoteData

SetPrice sets price

func (*PriceVoteData) Type

func (d *PriceVoteData) Type() Type

Type returns Data type of the transaction.

type PublicKey

type PublicKey [32]byte

PublicKey is public key.

func (*PublicKey) String

func (p *PublicKey) String() string

String returns PublicKey as string.

type RecreateCoinData

type RecreateCoinData struct {
	Name                 string     // Name of a coin
	Symbol               CoinSymbol // Symbol of a coin. Must be unique, alphabetic, uppercase, 3 to 10 symbols length
	InitialAmount        *big.Int   // Amount of coins to issue. Issued coins will be available to sender account. Should be between 1 and 1,000,000,000,000,000 coins.
	InitialReserve       *big.Int   // Initial reserve in BIP's
	ConstantReserveRatio uint32     // ConstantReserveRatio (CRR), should be from 10 to 100.
	MaxSupply            *big.Int   // Max amount of coins that are allowed to be issued. Maximum is 1,000,000,000,000,000
}

RecreateCoinData is a Data of Transaction for recreating new coin.

func NewRecreateCoinData

func NewRecreateCoinData() *RecreateCoinData

NewRecreateCoinData returns new RecreateCoinData of Transaction for recreating coin

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
	"math/big"
)

func main() {
	data := transaction.NewRecreateCoinData().
		SetSymbol("SPRTEST").
		SetInitialAmount(transaction.BipToPip(big.NewInt(100))).
		SetInitialReserve(transaction.BipToPip(big.NewInt(20000))).
		SetConstantReserveRatio(10).
		SetMaxSupply(transaction.BipToPip(big.NewInt(1000)))

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)

	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf87d0102010110adec808a5350525445535400000089056bc75e2d631000008a043c33c19375648000000a893635c9adc5dea00000808001b845f8431ca04743e4b01fc1c8305bbe9e84f483fb4a7411c419f9ec73124e4e75579a6fd5e0a06d241ed5b6a8c1b9154e7e1cba57de520fc6b5681b2aaa28f578b4e5c071c36b

func (*RecreateCoinData) Encode

func (d *RecreateCoinData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*RecreateCoinData) Fee

func (d *RecreateCoinData) Fee() Fee

Fee returns commission of transaction Data

func (*RecreateCoinData) SetConstantReserveRatio

func (d *RecreateCoinData) SetConstantReserveRatio(ratio uint32) *RecreateCoinData

SetConstantReserveRatio sets CRR, uint, should be from 10 to 100.

func (*RecreateCoinData) SetInitialAmount

func (d *RecreateCoinData) SetInitialAmount(value *big.Int) *RecreateCoinData

SetInitialAmount sets amount of coins to issue. Issued coins will be available to sender account.

func (*RecreateCoinData) SetInitialReserve

func (d *RecreateCoinData) SetInitialReserve(value *big.Int) *RecreateCoinData

SetInitialReserve sets initial reserve in BIP's.

func (*RecreateCoinData) SetMaxSupply

func (d *RecreateCoinData) SetMaxSupply(maxSupply *big.Int) *RecreateCoinData

SetMaxSupply sets maximum amount of coins that are allowed to be issued.

func (*RecreateCoinData) SetName

func (d *RecreateCoinData) SetName(name string) *RecreateCoinData

SetName sets name of a coin. Arbitrary string up to 64 letters length.

func (*RecreateCoinData) SetSymbol

func (d *RecreateCoinData) SetSymbol(symbol string) *RecreateCoinData

SetSymbol sets symbol of a coin. Must be unique, alphabetic, uppercase, 3 to 10 symbols length.

func (*RecreateCoinData) Type

func (d *RecreateCoinData) Type() Type

Type returns Data type of the transaction.

type RedeemCheckData

type RedeemCheckData struct {
	RawCheck []byte   // Check received from sender
	Proof    [65]byte // Proof of owning a check: password signed with recipient's address
}

RedeemCheckData is a Data of Transaction for redeeming a check. Note that maximum GasPrice is limited to 1 to prevent fraud, because GasPrice is set by redeem tx sender but commission is charded from check issuer.

func NewRedeemCheckData

func NewRedeemCheckData() *RedeemCheckData

NewRedeemCheckData returns new RedeemCheckData of Transaction for redeeming a check.

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
	"math/big"
)

func main() {
	check := transaction.NewCheck("02c0c0a4-8023-4654-ac5d-3c39ba1bd19c", transaction.MainNetChainID, 500, 0, big.NewInt(9223372036854775807), 0)
	checkSigned, _ := check.SetPassphrase("secret").Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	checkSignedEncode, _ := checkSigned.Encode()

	pr, _ := transaction.NewCheckAddress("Mx31e61A05adBD13c6B625262704bc305Bf7725026", "secret")
	proof, _ := pr.Proof()

	data := transaction.NewRedeemCheckData().
		MustSetProof(proof).
		MustSetRawCheck(checkSignedEncode)

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)
	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf901560102010109b90104f90101b8bcf8baa430326330633061342d383032332d343635342d616335642d336333396261316264313963018201f480887fffffffffffffff80b84164a1ab995f8d8883fa6e7d41e57774f5bcef72aa29cdf61875a4276250f610796d2a50e8dcadfe346fc8d3a555ff97fe3e6f3899879c1d852da6a444609bc1bc001ca0751931e85b03d4ecec72a7b1b2a9b1f92b7a7d260662d9822019cb4b1654f9d0a05e79fdcf59b85fd4637173d6a219255bf8e22898efa12227930c3a761e6225b5b8414aa2806ff70943c8a405011c76a416bf328d642b3ad656ef8cd7d26560facdf22ae4ef789f497bc8bec49b8e56d2bf3c2b2904262858032048d35776a2909e7b00808001b845f8431ca0ceb258c5216b4e95b8bb9121ce97d1133d6003b3de6680af3017e85ee9744c4aa04767cdc002ad8c8d5719c26518e65b222d4f137fc6861d70adba0fbee0bd6688

func (*RedeemCheckData) Encode

func (d *RedeemCheckData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*RedeemCheckData) Fee

func (d *RedeemCheckData) Fee() Fee

Fee returns commission of transaction Data

func (*RedeemCheckData) MustSetProof

func (d *RedeemCheckData) MustSetProof(proof string) *RedeemCheckData

MustSetProof tries to set proof of owning a check and panics on error.

func (*RedeemCheckData) MustSetRawCheck

func (d *RedeemCheckData) MustSetRawCheck(raw string) *RedeemCheckData

MustSetRawCheck tries to set check received from sender and panics on error.

func (*RedeemCheckData) SetProof

func (d *RedeemCheckData) SetProof(proof string) (*RedeemCheckData, error)

SetProof sets proof of owning a check.

func (*RedeemCheckData) SetRawCheck

func (d *RedeemCheckData) SetRawCheck(raw string) (*RedeemCheckData, error)

SetRawCheck sets check received from sender.

func (*RedeemCheckData) Type

func (d *RedeemCheckData) Type() Type

Type returns Data type of the transaction.

type SellAllCoinData

type SellAllCoinData struct {
	CoinToSell        CoinID   // ID of a coin to give
	CoinToBuy         CoinID   // ID of a coin to get
	MinimumValueToBuy *big.Int // Minimum value of coins to get
}

SellAllCoinData is Data of Transaction for selling one coin (owned by sender) in favour of another coin in a system.

func NewSellAllCoinData

func NewSellAllCoinData() *SellAllCoinData

NewSellAllCoinData returns new SellAllCoinData of Transaction for selling one coin (owned by sender) in favour of another coin in a system.

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
	"math/big"
)

func main() {
	data := transaction.NewSellAllCoinData().
		SetCoinToSell(1).
		SetCoinToBuy(2).
		SetMinimumValueToBuy(transaction.BipToPip(big.NewInt(1)))

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)
	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf85c01020101038ccb0102880de0b6b3a7640000808001b845f8431ba0db51e3ca2b75a4a617362946f5f5ee26c75900dae8f8be2400509338bafcd8d4a02e031ead1656d1321520564a34321acc8c6dda63cd4c8bd4530ec641aa4b1c7b

func (*SellAllCoinData) Encode

func (d *SellAllCoinData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*SellAllCoinData) Fee

func (d *SellAllCoinData) Fee() Fee

Fee returns commission of transaction Data

func (*SellAllCoinData) SetCoinToBuy

func (d *SellAllCoinData) SetCoinToBuy(id uint64) *SellAllCoinData

SetCoinToBuy sets ID of a coin to get.

func (*SellAllCoinData) SetCoinToSell

func (d *SellAllCoinData) SetCoinToSell(id uint64) *SellAllCoinData

SetCoinToSell sets ID of a coin to give.

func (*SellAllCoinData) SetMinimumValueToBuy

func (d *SellAllCoinData) SetMinimumValueToBuy(value *big.Int) *SellAllCoinData

SetMinimumValueToBuy sets minimum value of coins to get

func (*SellAllCoinData) Type

func (d *SellAllCoinData) Type() Type

Type returns Data type of the transaction.

type SellCoinData

type SellCoinData struct {
	CoinToSell        CoinID   // ID of a coin to give
	ValueToSell       *big.Int // Amount of CoinToSell to give
	CoinToBuy         CoinID   // ID of a coin to get
	MinimumValueToBuy *big.Int // Minimum value of coins to get
}

SellCoinData is Data of Transaction for selling one coin (owned by sender) in favour of another coin in a system.

func NewSellCoinData

func NewSellCoinData() *SellCoinData

NewSellCoinData returns new SellCoinData of Transaction for selling one coin (owned by sender) in favour of another coin in a system.

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
	"math/big"
)

func main() {
	data := transaction.NewSellCoinData().
		SetCoinToSell(1).
		SetValueToSell(transaction.BipToPip(big.NewInt(1))).
		SetCoinToBuy(2).
		SetMinimumValueToBuy(transaction.BipToPip(big.NewInt(1)))
	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)
	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf865010201010295d401880de0b6b3a764000002880de0b6b3a7640000808001b845f8431ca01552ab0503f8173bef46f2336d48ef6e1fae7bb5aa8b51ec7332b720a8a2f15ca0166970c5d209bac8b5ffae32047f1e4e868c5a20f522aeebb0bc523ae16c64fa

func (*SellCoinData) Encode

func (d *SellCoinData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*SellCoinData) Fee

func (d *SellCoinData) Fee() Fee

Fee returns commission of transaction Data

func (*SellCoinData) SetCoinToBuy

func (d *SellCoinData) SetCoinToBuy(id uint32) *SellCoinData

SetCoinToBuy sets ID of a coin to get

func (*SellCoinData) SetCoinToSell

func (d *SellCoinData) SetCoinToSell(id uint32) *SellCoinData

SetCoinToSell sets ID of a coin to give

func (*SellCoinData) SetMinimumValueToBuy

func (d *SellCoinData) SetMinimumValueToBuy(value *big.Int) *SellCoinData

SetMinimumValueToBuy sets minimum value of coins to get

func (*SellCoinData) SetValueToSell

func (d *SellCoinData) SetValueToSell(value *big.Int) *SellCoinData

SetValueToSell sets amount of CoinToSell to give

func (*SellCoinData) Type

func (d *SellCoinData) Type() Type

Type returns Data type of the transaction.

type SendData

type SendData struct {
	Coin  CoinID   // ID of a coin
	To    Address  // Recipient address
	Value *big.Int // Amount of coin to send
}

SendData is a Data of Transaction for sending arbitrary coin.

func NewSendData

func NewSendData() *SendData

NewSendData returns new SendData of Transaction for sending arbitrary coin.

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
	"math/big"
)

func main() {
	data, _ := transaction.NewSendData().
		SetCoin(1).
		SetValue(transaction.BipToPip(big.NewInt(1))).
		SetTo("Mx1b685a7c1e78726c48f619c497a07ed75fe00483")

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)
	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf8700102010101a0df01941b685a7c1e78726c48f619c497a07ed75fe00483880de0b6b3a7640000808001b845f8431ba0fffc3f503ace8a5d0c87efe50cf33ad41e3475459120d9c6fd75bd796b192313a0243d643a799e844ad82382d41cee98137a1d0c5888ff13951919e5e241ab89e0

func (*SendData) Encode

func (d *SendData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*SendData) Fee

func (d *SendData) Fee() Fee

Fee returns commission of transaction Data

func (*SendData) MustSetTo

func (d *SendData) MustSetTo(address string) *SendData

MustSetTo tries to set recipient address and panics on error

func (*SendData) SetCoin

func (d *SendData) SetCoin(id uint64) *SendData

SetCoin sets ID of a coin.

func (*SendData) SetTo

func (d *SendData) SetTo(address string) (*SendData, error)

SetTo sets recipient address.

func (*SendData) SetValue

func (d *SendData) SetValue(value *big.Int) *SendData

SetValue sets amount of coin to send.

func (*SendData) Type

func (d *SendData) Type() Type

Type returns Data type of the transaction.

type SetCandidateOffData

type SetCandidateOffData struct {
	PubKey PublicKey // Public key of a validator
}

SetCandidateOffData is a Data of Transaction for turning candidate off. This transaction should be sent from ControlAddress or OwnerAddress which is set in the "Declare candidacy transaction".

func NewSetCandidateOffData

func NewSetCandidateOffData() *SetCandidateOffData

NewSetCandidateOffData returns new SetCandidateOffData of Transaction for turning candidate off.

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
)

func main() {
	data := transaction.NewSetCandidateOffData().
		MustSetPubKey("Mp0eb98ea04ae466d8d38f490db3c99b3996a90e24243952ce9822c6dc1e2c1a43")

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)
	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf872010201010ba2e1a00eb98ea04ae466d8d38f490db3c99b3996a90e24243952ce9822c6dc1e2c1a43808001b845f8431ca09c65f9b35430a5bcb64dc132f8167abbf878bf29ca2ad146a38a910d7b3dd70fa0706248027a98d2f54e78ab0ab9378b0d134d7e20be04a10c8836b8911c30f41f

func (*SetCandidateOffData) Encode

func (d *SetCandidateOffData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*SetCandidateOffData) Fee

func (d *SetCandidateOffData) Fee() Fee

Fee returns commission of transaction Data

func (*SetCandidateOffData) MustSetPubKey

func (d *SetCandidateOffData) MustSetPubKey(key string) *SetCandidateOffData

MustSetPubKey tries to set public key of validator and panics on error.

func (*SetCandidateOffData) SetPubKey

func (d *SetCandidateOffData) SetPubKey(key string) (*SetCandidateOffData, error)

SetPubKey sets public key of a validator.

func (*SetCandidateOffData) Type

func (d *SetCandidateOffData) Type() Type

Type returns Data type of the transaction.

type SetCandidateOnData

type SetCandidateOnData struct {
	PubKey PublicKey // Public key of a validator
}

SetCandidateOnData is a Data of Transaction for turning candidate on. This transaction should be sent from ControlAddress or OwnerAddress which is set in the "Declare candidacy transaction".

func NewSetCandidateOnData

func NewSetCandidateOnData() *SetCandidateOnData

NewSetCandidateOnData returns new SetCandidateOnData of Transaction for turning candidate on.

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
)

func main() {
	data := transaction.NewSetCandidateOnData().
		MustSetPubKey("Mp0eb98ea04ae466d8d38f490db3c99b3996a90e24243952ce9822c6dc1e2c1a43")
	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)
	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf872010201010aa2e1a00eb98ea04ae466d8d38f490db3c99b3996a90e24243952ce9822c6dc1e2c1a43808001b845f8431ca06be0a4f7103b529bf3bd38a38bde50468b5001fb8c765b49973e0986572e328aa01c11fee8cb064e54a82408199619b9f1dcb35333b47affd8a08a1a6600c5f6d5

func (*SetCandidateOnData) Encode

func (d *SetCandidateOnData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*SetCandidateOnData) Fee

func (d *SetCandidateOnData) Fee() Fee

Fee returns commission of transaction Data

func (*SetCandidateOnData) MustSetPubKey

func (d *SetCandidateOnData) MustSetPubKey(key string) *SetCandidateOnData

MustSetPubKey tries to set public key of validator and panics on error.

func (*SetCandidateOnData) SetPubKey

func (d *SetCandidateOnData) SetPubKey(key string) (*SetCandidateOnData, error)

SetPubKey ets public key of a validator.

func (*SetCandidateOnData) Type

func (d *SetCandidateOnData) Type() Type

Type returns Data type of the transaction.

type SetHaltBlockData

type SetHaltBlockData struct {
	PubKey PublicKey
	Height uint64
}

SetHaltBlockData is a Data of Transaction for voting to stop the network on block. This transaction should be sent from OwnerAddress which is set in the "Declare candidacy transaction".

func NewSetHaltBlockData

func NewSetHaltBlockData() *SetHaltBlockData

NewSetHaltBlockData returns new SetHaltBlockData of Transaction for voting to stop the network on block.

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
)

func main() {
	data := transaction.NewSetHaltBlockData().
		MustSetPubKey("Mp0eb98ea04ae466d8d38f490db3c99b3996a90e24243952ce9822c6dc1e2c1a43").
		SetHeight(123456)

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)

	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf875010201010fa6e5a00eb98ea04ae466d8d38f490db3c99b3996a90e24243952ce9822c6dc1e2c1a438301e240808001b844f8421ca03732a48f4c52c2ec63741ccab959d77c8618b34cbf95f6b8bd1ae57ac87888939fb1551f624c8b7519231716cd6ba9166d14fe27a1e55863ae22f7a3f6d88bfa

func (*SetHaltBlockData) Encode

func (d *SetHaltBlockData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*SetHaltBlockData) Fee

func (d *SetHaltBlockData) Fee() Fee

Fee returns commission of transaction Data

func (*SetHaltBlockData) MustSetPubKey

func (d *SetHaltBlockData) MustSetPubKey(key string) *SetHaltBlockData

MustSetPubKey tries to set public key and panics on error.

func (*SetHaltBlockData) SetHeight

func (d *SetHaltBlockData) SetHeight(height uint64) *SetHaltBlockData

SetHeight sets height

func (*SetHaltBlockData) SetPubKey

func (d *SetHaltBlockData) SetPubKey(key string) (*SetHaltBlockData, error)

SetPubKey sets public key.

func (*SetHaltBlockData) Type

func (d *SetHaltBlockData) Type() Type

Type returns Data type of the transaction.

type Signature

type Signature interface {
	// Encode returns digital signature of transaction.
	Encode() ([]byte, error)
	// Single returns SignatureSingle.
	Single() ([]byte, error)
	// Type returns signature type.
	Type() SignatureType
}

Signature is interface of signatures

type SignatureMulti

type SignatureMulti struct {
	Multisig   Address
	Signatures []*SignatureSingle
}

SignatureMulti is signature of multisig address

func (*SignatureMulti) Encode

func (s *SignatureMulti) Encode() ([]byte, error)

Encode returns digital signature of transaction.

func (*SignatureMulti) Single

func (s *SignatureMulti) Single() ([]byte, error)

Single returns SingleSignature

func (*SignatureMulti) Type

func (s *SignatureMulti) Type() SignatureType

Type returns SignatureType.

type SignatureSingle

type SignatureSingle struct {
	V *big.Int
	R *big.Int
	S *big.Int
}

SignatureSingle is single signature.

func (*SignatureSingle) Encode

func (s *SignatureSingle) Encode() ([]byte, error)

Encode returns digital signature of transaction.

func (*SignatureSingle) Single

func (s *SignatureSingle) Single() ([]byte, error)

Single returns SignatureSingle.

func (*SignatureSingle) Type

func (s *SignatureSingle) Type() SignatureType

Type returns SignatureType of Signature.

type SignatureType

type SignatureType byte

SignatureType is type of signature (1 - SignatureTypeSingle, 2 - SignatureTypeMulti)

const (
	SignatureTypeSingle SignatureType // 0x01
	SignatureTypeMulti                // 0x02
)

Types of Signature

type Signed

type Signed interface {

	// GetTransaction returns Transaction struct
	GetTransaction() *Transaction
	// Fee returns fee of transaction in PIP. Also sender should pay extra 2 units per byte in Payload and ServiceData fields.
	Fee() *big.Int
	// Hash returns hash of Transaction.
	Hash() (string, error)
	// Data returns Data of the Transaction.
	Data() Data
	// Signature returns Signature interface.
	Signature() (Signature, error)
	// AddSignature adds signature from hex strings.
	AddSignature(signatures ...string) (Signed, error)
	// SignatureData returns bytes of Signature.
	SignatureData() []byte
	// SingleSignatureData returns SignatureData.
	SingleSignatureData() (string, error)
	// SenderAddress returns sender addresses.
	SenderAddress() (string, error)
	// Signers returns set of signers.
	Signers() ([]string, error)
	// Sign signs transaction with a private key.
	Sign(prKey string, prKeys ...string) (Signed, error)
	// Clone returns copy of the transaction.
	Clone() Interface
	// contains filtered or unexported methods
}

Signed is interface of signed Transaction.

func Decode

func Decode(tx string) (Signed, error)

Decode returns Signed model with Transaction and Data.

Example (SignersOfMultiSignature)
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
)

func main() {
	decode, _ := transaction.Decode("0xf901130102010101a0df01941b685a7c1e78726c48f619c497a07ed75fe00483880de0b6b3a7640000808002b8e8f8e6940023aa9371e0779189ef5a7434456fc21a938945f8cff8431ca07dd407fa5d2a161581d03cdeb7c94fcd5ade47d376af75f2c92d1483f821fe2ca00d16b6cdbceaadcd0fd72bd39ee17841871da333a571535fccfbcf6285881c2af8431ba07c2d063126024a1e19363e7e254312ca9ab37795b06102da25bd1c0dec81a934a043b7bec83db41c594ac7a8d416fca2f83f0e65ada1221fe659ba4dbe1f3c921af8431ba09318e56a242c39c10ce87ab51d10322cc62cf23885867bc89a24e8c3fa8483e9a04c82c1224d1b4efa7fba06623da2896745ce444d35ed77973759e6404b66bb95")
	signers, _ := decode.Signers()
	for _, signer := range signers {
		fmt.Println(signer)
	}

	address, _ := decode.SenderAddress()
	fmt.Println(address)

}
Output:

Mx08d920c5d93dbf23038fe1a54bbb34f41f77677c
Mx6bf192730d01a19739b5030cdb6a60c992712a59
Mx823bb524d5702addbe13086082f7f0310e07d176
Mx0023aa9371e0779189ef5a7434456fc21a938945
Example (SignersOfSingleSignature)
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
)

func main() {
	decode, _ := transaction.Decode("0xf8700102010101a0df01941b685a7c1e78726c48f619c497a07ed75fe00483880de0b6b3a7640000808001b845f8431ba0fffc3f503ace8a5d0c87efe50cf33ad41e3475459120d9c6fd75bd796b192313a0243d643a799e844ad82382d41cee98137a1d0c5888ff13951919e5e241ab89e0")
	signers, _ := decode.Signers()
	for _, signer := range signers {
		fmt.Println(signer)
	}

	address, _ := decode.SenderAddress()
	fmt.Println(address)

}
Output:

Mx622e1e0e788f4b1258f7e2a196f738c6a360c3de
Mx622e1e0e788f4b1258f7e2a196f738c6a360c3de

type Transaction

type Transaction struct {
	Nonce         uint64        // used for prevent transaction reply
	ChainID       ChainID       // id of the network (1 - mainnet, 2 - testnet)
	GasPrice      uint8         // fee multiplier, should be equal or greater than current mempool min gas price.
	GasCoin       CoinID        // ID of a coin to pay fee, right padded with zeros
	Type          Type          // type of transaction
	Data          []byte        // data of transaction (depends on transaction type)
	Payload       []byte        // arbitrary user-defined bytes
	ServiceData   []byte        // reserved field
	SignatureType SignatureType // single or multisig transaction
	SignatureData []byte        // digital signature of transaction
}

Transaction is transaction model.

func (*Transaction) Encode

func (tx *Transaction) Encode() (string, error)

Encode returns string representation of a transaction. RLP-encoded structure in hex format.

type Type

type Type byte

Type of transaction is determined by a single byte.

const (
	TypeSend                   Type // 0x01
	TypeSellCoin                    // 0x02
	TypeSellAllCoin                 // 0x03
	TypeBuyCoin                     // 0x04
	TypeCreateCoin                  // 0x05
	TypeDeclareCandidacy            // 0x06
	TypeDelegate                    // 0x07
	TypeUnbond                      // 0x08
	TypeRedeemCheck                 // 0x09
	TypeSetCandidateOnline          // 0x0A
	TypeSetCandidateOffline         // 0x0B
	TypeCreateMultisig              // 0x0C
	TypeMultisend                   // 0x0D
	TypeEditCandidate               // 0x0E
	TypeSetHaltBlock                // 0x0F
	TypeRecreateCoin                // 0x10
	TypeEditCoinOwner               // 0x11
	TypeEditMultisig                // 0x12
	TypePriceVote                   // 0x13
	TypeEditCandidatePublicKey      // 0x14
)

Types of Data

type UnbondData

type UnbondData struct {
	PubKey PublicKey // Public key of a validator
	Coin   CoinID    // ID of coin to stake
	Value  *big.Int  // Amount of coins to stake
}

UnbondData is a Data of Transaction for unbonding funds from validator's stake.

func NewUnbondData

func NewUnbondData() *UnbondData

NewUnbondData create data of Transaction for unbonding funds from validator's stake

Example
package main

import (
	"fmt"
	"github.com/MinterTeam/minter-go-sdk/v2/transaction"
	"math/big"
)

func main() {
	data := transaction.NewUnbondData().
		MustSetPubKey("Mp0eb98ea04ae466d8d38f490db3c99b3996a90e24243952ce9822c6dc1e2c1a43").
		SetCoin(1).
		SetValue(transaction.BipToPip(big.NewInt(10)))

	tx, _ := transaction.NewBuilder(transaction.TestNetChainID).NewTransaction(data)
	signedTx, _ := tx.SetNonce(1).SetGasPrice(1).SetGasCoin(1).Sign("07bc17abdcee8b971bb8723e36fe9d2523306d5ab2d683631693238e0f9df142")
	signedTxEncode, _ := signedTx.Encode()
	fmt.Println(signedTxEncode)
}
Output:

0xf87c0102010108aceba00eb98ea04ae466d8d38f490db3c99b3996a90e24243952ce9822c6dc1e2c1a4301888ac7230489e80000808001b845f8431ca0b51138984781f47bec471a8d6185c5bd57fd6b31dfb323152fe4802084621fc4a040aa80f40f4613f5c4171c36270ab5815e6697f5cbf756250063564233a8456c

func (*UnbondData) Encode

func (d *UnbondData) Encode() ([]byte, error)

Encode returns the byte representation of a transaction Data.

func (*UnbondData) Fee

func (d *UnbondData) Fee() Fee

Fee returns commission of transaction Data

func (*UnbondData) MustSetPubKey

func (d *UnbondData) MustSetPubKey(key string) *UnbondData

MustSetPubKey tries to set public key of validator and panics on error.

func (*UnbondData) SetCoin

func (d *UnbondData) SetCoin(id uint64) *UnbondData

SetCoin sets ID of coin to stake

func (*UnbondData) SetPubKey

func (d *UnbondData) SetPubKey(key string) (*UnbondData, error)

SetPubKey sets Public key of a validator

func (*UnbondData) SetValue

func (d *UnbondData) SetValue(value *big.Int) *UnbondData

SetValue sets amount of coins to stake

func (*UnbondData) Type

func (d *UnbondData) Type() Type

Type returns Data type of the transaction.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL