mirror of
https://github.com/XRPLF/xrpl-dev-portal.git
synced 2025-11-20 11:45:50 +00:00
149 lines
3.0 KiB
Go
149 lines
3.0 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
|
"github.com/Peersyst/xrpl-go/xrpl/queries/account"
|
|
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
|
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
|
"github.com/Peersyst/xrpl-go/xrpl/websocket"
|
|
)
|
|
|
|
const (
|
|
WalletSeed = "sn3nxiW7v8KXzPzAqzyHXbSSKNuN9"
|
|
)
|
|
|
|
func main() {
|
|
fmt.Println("⏳ Connecting to testnet...")
|
|
client := websocket.NewClient(
|
|
websocket.NewClientConfig().
|
|
WithHost("wss://s.altnet.rippletest.net:51233").
|
|
WithFaucetProvider(faucet.NewTestnetFaucetProvider()),
|
|
)
|
|
defer client.Disconnect()
|
|
|
|
if err := client.Connect(); err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
|
|
if !client.IsConnected() {
|
|
fmt.Println("❌ Failed to connect to testnet")
|
|
return
|
|
}
|
|
|
|
fmt.Println("✅ Connected to testnet")
|
|
fmt.Println()
|
|
|
|
w, err := wallet.FromSeed(WalletSeed, "")
|
|
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)
|
|
}
|