mirror of
https://github.com/luxfi/sdk.git
synced 2026-10-30 15:19:23 +00:00
73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
// Copyright (C) 2019-2025, Lux Industries, Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package p
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/luxfi/proto/p/txs"
|
|
"github.com/luxfi/sdk/platformvm"
|
|
"github.com/luxfi/sdk/wallet/chain/p/builder"
|
|
"github.com/luxfi/sdk/wallet/chain/p/wallet"
|
|
"github.com/luxfi/sdk/wallet/primary/common"
|
|
)
|
|
|
|
var _ wallet.Client = (*Client)(nil)
|
|
|
|
func NewClient(
|
|
c *platformvm.Client,
|
|
b wallet.Backend,
|
|
) *Client {
|
|
return &Client{
|
|
client: c,
|
|
backend: b,
|
|
}
|
|
}
|
|
|
|
type Client struct {
|
|
client *platformvm.Client
|
|
backend wallet.Backend
|
|
}
|
|
|
|
func (c *Client) IssueTx(
|
|
tx *txs.Tx,
|
|
options ...common.Option,
|
|
) error {
|
|
ops := common.NewOptions(options)
|
|
ctx := ops.Context()
|
|
startTime := time.Now()
|
|
txID, err := c.client.IssueTx(ctx, tx.Bytes())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
issuanceDuration := time.Since(startTime)
|
|
if f := ops.PostIssuanceFunc(); f != nil {
|
|
f(txID)
|
|
}
|
|
|
|
if ops.AssumeDecided() {
|
|
return c.backend.AcceptTx(ctx, tx)
|
|
}
|
|
|
|
if err := platformvm.AwaitTxAccepted(c.client, ctx, txID, ops.PollFrequency()); err != nil {
|
|
return err
|
|
}
|
|
|
|
if f := ops.ConfirmationHandler(); f != nil {
|
|
totalDuration := time.Since(startTime)
|
|
confirmationDuration := totalDuration - issuanceDuration
|
|
|
|
f(common.ConfirmationReceipt{
|
|
ChainAlias: builder.Alias,
|
|
TxID: txID,
|
|
IssuanceDuration: issuanceDuration,
|
|
ConfirmationDuration: confirmationDuration,
|
|
TotalDuration: totalDuration,
|
|
})
|
|
}
|
|
|
|
return c.backend.AcceptTx(ctx, tx)
|
|
}
|