builder

package
v0.0.0-...-6519026 Latest Latest
Warning

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

Go to latest
Published: Jul 19, 2024 License: BSD-3-Clause Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
const Alias = "P"

Variables

View Source
var (
	ErrNoChangeAddress           = errors.New("no possible change address")
	ErrUnknownOutputType         = errors.New("unknown output type")
	ErrUnknownOwnerType          = errors.New("unknown owner type")
	ErrInsufficientAuthorization = errors.New("insufficient authorization")
	ErrInsufficientFunds         = errors.New("insufficient funds")
)

Functions

func NewSnowContext

func NewSnowContext(networkID uint32, juneAssetID ids.ID) (*snow.Context, error)

Types

type Backend

type Backend interface {
	UTXOs(ctx context.Context, sourceChainID ids.ID) ([]*avax.UTXO, error)
	GetSupernetOwner(ctx context.Context, supernetID ids.ID) (fx.Owner, error)
}

type Builder

type Builder interface {
	// Context returns the configuration of the chain that this builder uses to
	// create transactions.
	Context() *Context

	// GetBalance calculates the amount of each asset that this builder has
	// control over.
	GetBalance(
		options ...common.Option,
	) (map[ids.ID]uint64, error)

	// GetImportableBalance calculates the amount of each asset that this
	// builder could import from the provided chain.
	//
	// - [chainID] specifies the chain the funds are from.
	GetImportableBalance(
		chainID ids.ID,
		options ...common.Option,
	) (map[ids.ID]uint64, error)

	// NewBaseTx creates a new simple value transfer.
	//
	// - [outputs] specifies all the recipients and amounts that should be sent
	//   from this transaction.
	NewBaseTx(
		outputs []*avax.TransferableOutput,
		options ...common.Option,
	) (*txs.BaseTx, error)

	// NewAddValidatorTx creates a new validator of the primary network.
	//
	// - [vdr] specifies all the details of the validation period such as the
	//   startTime, endTime, stake weight, and nodeID.
	// - [rewardsOwner] specifies the owner of all the rewards this validator
	//   may accrue during its validation period.
	// - [shares] specifies the fraction (out of 1,000,000) that this validator
	//   will take from delegation rewards. If 1,000,000 is provided, 100% of
	//   the delegation reward will be sent to the validator's [rewardsOwner].
	NewAddValidatorTx(
		vdr *txs.Validator,
		rewardsOwner *secp256k1fx.OutputOwners,
		shares uint32,
		options ...common.Option,
	) (*txs.AddValidatorTx, error)

	// NewAddSupernetValidatorTx creates a new validator of a supernet.
	//
	// - [vdr] specifies all the details of the validation period such as the
	//   startTime, endTime, sampling weight, nodeID, and supernetID.
	NewAddSupernetValidatorTx(
		vdr *txs.SupernetValidator,
		options ...common.Option,
	) (*txs.AddSupernetValidatorTx, error)

	// NewRemoveSupernetValidatorTx removes [nodeID] from the validator
	// set [supernetID].
	NewRemoveSupernetValidatorTx(
		nodeID ids.NodeID,
		supernetID ids.ID,
		options ...common.Option,
	) (*txs.RemoveSupernetValidatorTx, error)

	// NewAddDelegatorTx creates a new delegator to a validator on the primary
	// network.
	//
	// - [vdr] specifies all the details of the delegation period such as the
	//   startTime, endTime, stake weight, and validator's nodeID.
	// - [rewardsOwner] specifies the owner of all the rewards this delegator
	//   may accrue at the end of its delegation period.
	NewAddDelegatorTx(
		vdr *txs.Validator,
		rewardsOwner *secp256k1fx.OutputOwners,
		options ...common.Option,
	) (*txs.AddDelegatorTx, error)

	// NewCreateChainTx creates a new chain in the named supernet.
	//
	// - [supernetID] specifies the supernet to launch the chain in.
	// - [genesis] specifies the initial state of the new chain.
	// - [vmID] specifies the vm that the new chain will run.
	// - [fxIDs] specifies all the feature extensions that the vm should be
	//   running with.
	// - [chainName] specifies a human readable name for the chain.
	// - [chainAssetID] specifies the main asset used by this chain to pay the fees
	NewCreateChainTx(
		supernetID ids.ID,
		genesis []byte,
		vmID ids.ID,
		fxIDs []ids.ID,
		chainName string,
		chainAssetID ids.ID,
		options ...common.Option,
	) (*txs.CreateChainTx, error)

	// NewCreateSupernetTx creates a new supernet with the specified owner.
	//
	// - [owner] specifies who has the ability to create new chains and add new
	//   validators to the supernet.
	NewCreateSupernetTx(
		owner *secp256k1fx.OutputOwners,
		options ...common.Option,
	) (*txs.CreateSupernetTx, error)

	// NewTransferSupernetOwnershipTx changes the owner of the named supernet.
	//
	// - [supernetID] specifies the supernet to be modified
	// - [owner] specifies who has the ability to create new chains and add new
	//   validators to the supernet.
	NewTransferSupernetOwnershipTx(
		supernetID ids.ID,
		owner *secp256k1fx.OutputOwners,
		options ...common.Option,
	) (*txs.TransferSupernetOwnershipTx, error)

	// NewImportTx creates an import transaction that attempts to consume all
	// the available UTXOs and import the funds to [to].
	//
	// - [chainID] specifies the chain to be importing funds from.
	// - [to] specifies where to send the imported funds to.
	NewImportTx(
		chainID ids.ID,
		to *secp256k1fx.OutputOwners,
		options ...common.Option,
	) (*txs.ImportTx, error)

	// NewExportTx creates an export transaction that attempts to send all the
	// provided [outputs] to the requested [chainID].
	//
	// - [chainID] specifies the chain to be exporting the funds to.
	// - [outputs] specifies the outputs to send to the [chainID].
	NewExportTx(
		chainID ids.ID,
		outputs []*avax.TransferableOutput,
		options ...common.Option,
	) (*txs.ExportTx, error)

	// NewTransformSupernetTx creates a transform supernet transaction that attempts
	// to convert the provided [supernetID] from a permissioned supernet to a
	// permissionless supernet. This transaction will convert
	// [initialRewardPoolSupply] of [assetID] to staking rewards.
	//
	// - [supernetID] specifies the supernet to transform.
	// - [assetID] specifies the asset to use to reward stakers on the supernet.
	// - [initialRewardPoolSupply] the amount of rewards that will be initially
	//   available in the reward pool of the supernet.
	// - [startRewardShare] starting share of rewards given to validators.
	// - [startRewardTime] starting timestamp that will be used to calculate
	//   the remaining percentage of rewards given to validators.
	// - [diminishingRewardShare] share of rewards given to validators at the start of diminishing year.
	// - [diminishingRewardTime] target timestamp that will be used to calculate
	//   the remaining percentage of rewards given to validators.
	// - [targetRewardShare] target final share of rewards given to validators.
	// - [targetRewardTime] target timestamp that will be used to calculate
	//   the remaining percentage of rewards given to validators.
	// - [minValidatorStake] is the minimum amount of funds required to become a
	//   validator.
	// - [maxValidatorStake] is the maximum amount of funds a single validator
	//   can be allocated, including delegated funds.
	// - [minStakeDuration] is the minimum number of seconds a staker can stake
	//   for.
	// - [maxStakeDuration] is the maximum number of seconds a staker can stake
	//   for.
	// - [stakePeriodRewardShare] the maximum period reward given for a
	//   stake period equal to MaxStakePeriod.
	// - [minDelegationFee] the minimum percentage a validator must charge a
	//   delegator for delegating.
	// - [maxDelegationFee] the maximum percentage a validator must charge a
	//   delegator for delegating.
	// - [minDelegatorStake] is the minimum amount of funds required to become a
	//   delegator.
	// - [maxValidatorWeightFactor] is the factor which calculates the maximum
	//   amount of delegation a validator can receive. A value of 1 effectively
	//   disables delegation.
	// - [uptimeRequirement] is the minimum percentage a validator must be
	//   online and responsive to receive a reward.
	NewTransformSupernetTx(
		supernetID ids.ID,
		assetID ids.ID,
		initialRewardPoolSupply uint64,
		startRewardShare uint64,
		startRewardTime uint64,
		diminishingRewardShare uint64,
		diminishingRewardTime uint64,
		targetRewardShare uint64,
		targetRewardTime uint64,
		minValidatorStake uint64,
		maxValidatorStake uint64,
		minStakeDuration time.Duration,
		maxStakeDuration time.Duration,
		stakePeriodRewardShare uint64,
		minDelegationFee uint32,
		maxDelegationFee uint32,
		minDelegatorStake uint64,
		maxValidatorWeightFactor byte,
		uptimeRequirement uint32,
		options ...common.Option,
	) (*txs.TransformSupernetTx, error)

	// NewAddPermissionlessValidatorTx creates a new validator of the specified
	// supernet.
	//
	// - [vdr] specifies all the details of the validation period such as the
	//   supernetID, startTime, endTime, stake weight, and nodeID.
	// - [signer] if the supernetID is the primary network, this is the BLS key
	//   for this validator. Otherwise, this value should be the empty signer.
	// - [assetID] specifies the asset to stake.
	// - [validationRewardsOwner] specifies the owner of all the rewards this
	//   validator earns for its validation period.
	// - [delegationRewardsOwner] specifies the owner of all the rewards this
	//   validator earns for delegations during its validation period.
	// - [shares] specifies the fraction (out of 1,000,000) that this validator
	//   will take from delegation rewards. If 1,000,000 is provided, 100% of
	//   the delegation reward will be sent to the validator's [rewardsOwner].
	NewAddPermissionlessValidatorTx(
		vdr *txs.SupernetValidator,
		signer signer.Signer,
		assetID ids.ID,
		validationRewardsOwner *secp256k1fx.OutputOwners,
		delegationRewardsOwner *secp256k1fx.OutputOwners,
		shares uint32,
		options ...common.Option,
	) (*txs.AddPermissionlessValidatorTx, error)

	// NewAddPermissionlessDelegatorTx creates a new delegator of the specified
	// supernet on the specified nodeID.
	//
	// - [vdr] specifies all the details of the delegation period such as the
	//   supernetID, startTime, endTime, stake weight, and nodeID.
	// - [assetID] specifies the asset to stake.
	// - [rewardsOwner] specifies the owner of all the rewards this delegator
	//   earns during its delegation period.
	NewAddPermissionlessDelegatorTx(
		vdr *txs.SupernetValidator,
		assetID ids.ID,
		rewardsOwner *secp256k1fx.OutputOwners,
		options ...common.Option,
	) (*txs.AddPermissionlessDelegatorTx, error)
}

Builder provides a convenient interface for building unsigned P-chain transactions.

func New

func New(
	addrs set.Set[ids.ShortID],
	context *Context,
	backend Backend,
) Builder

New returns a new transaction builder.

  • [addrs] is the set of addresses that the builder assumes can be used when signing the transactions in the future.
  • context provides the chain's configuration.
  • [backend] provides the chain's state.

func NewWithOptions

func NewWithOptions(builder Builder, options ...common.Option) Builder

NewWithOptions returns a new builder that will use the given options by default.

  • builder is the builder that will be called to perform the underlying operations.
  • [options] will be provided to the builder in addition to the options provided in the method calls.

type Context

type Context struct {
	NetworkID                     uint32
	JUNEAssetID                   ids.ID
	BaseTxFee                     uint64
	CreateSupernetTxFee           uint64
	TransformSupernetTxFee        uint64
	CreateBlockchainTxFee         uint64
	AddPrimaryNetworkValidatorFee uint64
	AddPrimaryNetworkDelegatorFee uint64
	AddSupernetValidatorFee       uint64
	AddSupernetDelegatorFee       uint64
}

func NewContextFromClients

func NewContextFromClients(
	ctx context.Context,
	infoClient info.Client,
	xChainClient avm.Client,
) (*Context, error)

func NewContextFromURI

func NewContextFromURI(ctx context.Context, uri string) (*Context, error)

Jump to

Keyboard shortcuts

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