Files
xrpl-dev-portal/_code-samples/use-tickets/go/main.go
2025-07-23 10:51:03 +02:00

135 lines
3.1 KiB
Go

package main
import (
"encoding/json"
"fmt"
"github.com/Peersyst/xrpl-go/pkg/crypto"
"github.com/Peersyst/xrpl-go/xrpl/faucet"
"github.com/Peersyst/xrpl-go/xrpl/queries/account"
"github.com/Peersyst/xrpl-go/xrpl/rpc"
"github.com/Peersyst/xrpl-go/xrpl/transaction"
"github.com/Peersyst/xrpl-go/xrpl/wallet"
)
func main() {
cfg, err := rpc.NewClientConfig(
"https://s.altnet.rippletest.net:51234/",
rpc.WithFaucetProvider(faucet.NewTestnetFaucetProvider()),
)
if err != nil {
panic(err)
}
client := rpc.NewClient(cfg)
w, err := wallet.New(crypto.ED25519())
if err != nil {
fmt.Println(err)
return
}
fmt.Println("⏳ Funding wallet...")
if err := client.FundWallet(&w); err != nil {
fmt.Println(err)
return
}
fmt.Println("💸 Wallet funded")
fmt.Println()
info, err := client.GetAccountInfo(&account.InfoRequest{
Account: w.GetAddress(),
})
if err != nil {
fmt.Println(err)
return
}
fmt.Println("🌐 Current wallet sequence:", info.AccountData.Sequence)
fmt.Println()
fmt.Println("⏳ Submitting TicketCreate transaction...")
tc := &transaction.TicketCreate{
BaseTx: transaction.BaseTx{
Account: w.GetAddress(),
Sequence: info.AccountData.Sequence,
},
TicketCount: 10,
}
flatTc := tc.Flatten()
if err := client.Autofill(&flatTc); err != nil {
fmt.Println(err)
return
}
blob, _, err := w.Sign(flatTc)
if err != nil {
fmt.Println(err)
return
}
res, err := client.SubmitTxBlobAndWait(blob, false)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("✅ TicketCreate transaction submitted")
fmt.Printf("🌐 Hash: %s\n", res.Hash)
fmt.Printf("🌐 Validated: %t\n", res.Validated)
fmt.Println()
objects, err := client.GetAccountObjects(&account.ObjectsRequest{
Account: w.GetAddress(),
})
if err != nil {
fmt.Println(err)
return
}
fmt.Println("🌐 Account objects:", objects.AccountObjects[0]["TicketSequence"])
seq, err := objects.AccountObjects[0]["TicketSequence"].(json.Number).Int64()
if err != nil {
fmt.Println(err)
return
}
fmt.Println("⏳ Submitting AccountSet transaction...")
as := &transaction.AccountSet{
BaseTx: transaction.BaseTx{
Account: w.GetAddress(),
Sequence: 0,
TicketSequence: uint32(seq),
},
}
flatAs := as.Flatten()
if err := client.Autofill(&flatAs); err != nil {
fmt.Println(err)
return
}
flatAs["Sequence"] = uint32(0)
blob, _, err = w.Sign(flatAs)
if err != nil {
fmt.Println(err)
return
}
res, err = client.SubmitTxBlobAndWait(blob, false)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("✅ AccountSet transaction submitted")
fmt.Printf("🌐 Hash: %s\n", res.Hash)
fmt.Printf("🌐 Validated: %t\n", res.Validated)
}