mirror of
https://github.com/XRPLF/xrpl-dev-portal.git
synced 2025-11-04 20:05:50 +00:00
135 lines
3.1 KiB
Go
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)
|
|
}
|