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