Add set default sui price with client
This commit is contained in:
@@ -2,11 +2,13 @@ package transaction
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"math"
|
||||
|
||||
"github.com/block-vision/sui-go-sdk/models"
|
||||
"github.com/block-vision/sui-go-sdk/mystenbcs"
|
||||
"github.com/block-vision/sui-go-sdk/signer"
|
||||
"github.com/block-vision/sui-go-sdk/sui"
|
||||
"github.com/block-vision/sui-go-sdk/utils"
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
@@ -14,6 +16,7 @@ import (
|
||||
type Transaction struct {
|
||||
Data TransactionData
|
||||
Signer *signer.Signer
|
||||
SuiClient *sui.Client
|
||||
}
|
||||
|
||||
func NewTransaction() *Transaction {
|
||||
@@ -21,9 +24,6 @@ func NewTransaction() *Transaction {
|
||||
data.V1.Kind = &TransactionKind{
|
||||
ProgrammableTransaction: &ProgrammableTransaction{},
|
||||
}
|
||||
data.V1.Expiration = &TransactionExpiration{
|
||||
None: lo.ToPtr(true),
|
||||
}
|
||||
|
||||
return &Transaction{
|
||||
Data: data,
|
||||
@@ -36,13 +36,19 @@ func (tx *Transaction) SetSigner(signer *signer.Signer) *Transaction {
|
||||
return tx
|
||||
}
|
||||
|
||||
func (tx *Transaction) SetSuiClient(client *sui.Client) *Transaction {
|
||||
tx.SuiClient = client
|
||||
|
||||
return tx
|
||||
}
|
||||
|
||||
func (tx *Transaction) SetSender(sender models.SuiAddress) *Transaction {
|
||||
address := utils.NormalizeSuiAddress(string(sender))
|
||||
addressBytes, err := ConvertSuiAddressStringToBytes(address)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
tx.Data.V1.Sender = *addressBytes
|
||||
tx.Data.V1.Sender = addressBytes
|
||||
|
||||
return tx
|
||||
}
|
||||
@@ -311,6 +317,7 @@ func (tx *Transaction) Pure(input any) *Argument {
|
||||
}
|
||||
|
||||
func (tx *Transaction) ToSuiExecuteTransactionBlockRequest(
|
||||
ctx context.Context,
|
||||
options models.SuiTransactionBlockOptions,
|
||||
requestType string,
|
||||
) (*models.SuiExecuteTransactionBlockRequest, error) {
|
||||
@@ -318,7 +325,7 @@ func (tx *Transaction) ToSuiExecuteTransactionBlockRequest(
|
||||
return nil, ErrSignerNotSet
|
||||
}
|
||||
|
||||
txBytes, err := tx.buildTransaction()
|
||||
txBytes, err := tx.buildTransaction(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -336,11 +343,20 @@ func (tx *Transaction) ToSuiExecuteTransactionBlockRequest(
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (tx *Transaction) buildTransaction() (string, error) {
|
||||
func (tx *Transaction) buildTransaction(ctx context.Context) (string, error) {
|
||||
if tx.Signer == nil {
|
||||
return "", ErrSignerNotSet
|
||||
}
|
||||
|
||||
if tx.Data.V1.GasData.Price == nil {
|
||||
if tx.SuiClient != nil {
|
||||
rsp, err := tx.SuiClient.SuiXGetReferenceGasPrice(ctx)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
tx.SetGasPrice(rsp)
|
||||
}
|
||||
}
|
||||
tx.SetGasBudgetIfNotSet(defaultGasBudget)
|
||||
tx.SetSenderIfNotSet(models.SuiAddress(tx.Signer.Address))
|
||||
|
||||
@@ -360,7 +376,6 @@ func (tx *Transaction) build(onlyTransactionKind bool) (string, error) {
|
||||
if tx.Data.V1.Sender.IsZero() {
|
||||
return "", ErrSenderNotSet
|
||||
}
|
||||
// TODO: Support get latest gas data online
|
||||
if !tx.Data.V1.GasData.IsFullySet() {
|
||||
return "", ErrGasDataNotFullySet
|
||||
}
|
||||
|
||||
@@ -25,9 +25,9 @@ func (td *TransactionData) Marshal() ([]byte, error) {
|
||||
// TransactionDataV1 https://github.com/MystenLabs/sui/blob/fb27c6c7166f5e4279d5fd1b2ebc5580ca0e81b2/crates/sui-types/src/transaction.rs#L1625
|
||||
type TransactionDataV1 struct {
|
||||
Kind *TransactionKind
|
||||
Sender models.SuiAddressBytes
|
||||
Sender *models.SuiAddressBytes `bcs:"optional"`
|
||||
GasData GasData
|
||||
Expiration *TransactionExpiration
|
||||
Expiration *TransactionExpiration `bcs:"optional"`
|
||||
}
|
||||
|
||||
func (td *TransactionDataV1) AddCommand(command Command) (index uint16) {
|
||||
@@ -102,8 +102,7 @@ func (gd *GasData) IsFullySet() bool {
|
||||
// - None
|
||||
// - Epoch
|
||||
type TransactionExpiration struct {
|
||||
None *bool
|
||||
Epoch *uint64
|
||||
mystenbcs.Option[uint64]
|
||||
}
|
||||
|
||||
func (*TransactionExpiration) IsBcsEnum() {}
|
||||
|
||||
@@ -79,7 +79,9 @@ func generateObjectRef() SuiObjectRef {
|
||||
func setupTransaction() *Transaction {
|
||||
tx := NewTransaction()
|
||||
tx.SetSender("0x2").
|
||||
SetGasPrice(5).SetGasBudget(100).SetGasOwner("0x6").
|
||||
SetGasPayment([]SuiObjectRef{generateObjectRef()})
|
||||
SetGasPrice(5).
|
||||
SetGasBudget(100).
|
||||
SetGasPayment([]SuiObjectRef{generateObjectRef()}).
|
||||
SetGasOwner("0x6")
|
||||
return tx
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user