mirror of
https://github.com/XRPLF/xrpl-dev-portal.git
synced 2025-11-19 19:25:51 +00:00
chore(samples): replace tab for 4 spaces
This commit is contained in:
@@ -1,128 +1,128 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"fmt"
|
||||
|
||||
"github.com/Peersyst/xrpl-go/pkg/crypto"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/rpc"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/rpc/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
||||
txnTypes "github.com/Peersyst/xrpl-go/xrpl/transaction/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
||||
"github.com/Peersyst/xrpl-go/pkg/crypto"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/rpc"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/rpc/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
||||
txnTypes "github.com/Peersyst/xrpl-go/xrpl/transaction/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Initialize the RPC client configuration
|
||||
cfg, err := rpc.NewClientConfig(
|
||||
"https://s.devnet.rippletest.net:51234/",
|
||||
rpc.WithFaucetProvider(faucet.NewDevnetFaucetProvider()),
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
// Initialize the RPC client configuration
|
||||
cfg, err := rpc.NewClientConfig(
|
||||
"https://s.devnet.rippletest.net:51234/",
|
||||
rpc.WithFaucetProvider(faucet.NewDevnetFaucetProvider()),
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Create the RPC client
|
||||
client := rpc.NewClient(cfg)
|
||||
// Create the RPC client
|
||||
client := rpc.NewClient(cfg)
|
||||
|
||||
// Step 1: Fund wallets
|
||||
fmt.Println("⏳ Funding wallets...")
|
||||
// Step 1: Fund wallets
|
||||
fmt.Println("⏳ Funding wallets...")
|
||||
|
||||
// Create and fund the NFT minter wallet
|
||||
nftMinter, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftMinter); err != nil {
|
||||
fmt.Println("❌ Error funding NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT minter wallet funded!")
|
||||
// Create and fund the NFT minter wallet
|
||||
nftMinter, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftMinter); err != nil {
|
||||
fmt.Println("❌ Error funding NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT minter wallet funded!")
|
||||
|
||||
// Create and fund the NFT buyer wallet
|
||||
nftBuyer, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating NFT buyer wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftBuyer); err != nil {
|
||||
fmt.Println("❌ Error funding NFT buyer wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT buyer wallet funded!")
|
||||
fmt.Println()
|
||||
// Create and fund the NFT buyer wallet
|
||||
nftBuyer, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating NFT buyer wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftBuyer); err != nil {
|
||||
fmt.Println("❌ Error funding NFT buyer wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT buyer wallet funded!")
|
||||
fmt.Println()
|
||||
|
||||
// Step 2: Mint an NFT
|
||||
fmt.Println("⏳ Minting NFT...")
|
||||
// Step 2: Mint an NFT
|
||||
fmt.Println("⏳ Minting NFT...")
|
||||
|
||||
nftMint := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
Destination: nftBuyer.ClassicAddress,
|
||||
Amount: txnTypes.XRPCurrencyAmount(1000000), // 1 XRP
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint.SetTransferableFlag()
|
||||
nftMint := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
Destination: nftBuyer.ClassicAddress,
|
||||
Amount: txnTypes.XRPCurrencyAmount(1000000), // 1 XRP
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint.SetTransferableFlag()
|
||||
|
||||
responseMint, err := client.SubmitTxAndWait(nftMint.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ NFTokenMint txn is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
responseMint, err := client.SubmitTxAndWait(nftMint.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ NFTokenMint txn is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
|
||||
// Step 3: Retrieve the NFT token offer ID
|
||||
fmt.Println("⏳ Retrieving NFT offer ID...")
|
||||
// Step 3: Retrieve the NFT token offer ID
|
||||
fmt.Println("⏳ Retrieving NFT offer ID...")
|
||||
|
||||
metaMap, ok := responseMint.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
metaMap, ok := responseMint.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
|
||||
offerID, ok := metaMap["offer_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ offer_id not found or not a string")
|
||||
return
|
||||
}
|
||||
offerID, ok := metaMap["offer_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ offer_id not found or not a string")
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("🌎 offer_id:", offerID)
|
||||
fmt.Println()
|
||||
fmt.Println("🌎 offer_id:", offerID)
|
||||
fmt.Println()
|
||||
|
||||
// Step 4: Accept the NFT offer
|
||||
fmt.Println("⏳ Accepting NFT offer...")
|
||||
// Step 4: Accept the NFT offer
|
||||
fmt.Println("⏳ Accepting NFT offer...")
|
||||
|
||||
nftAccept := transaction.NFTokenAcceptOffer{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftBuyer.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenAcceptOfferTx,
|
||||
},
|
||||
NFTokenSellOffer: txnTypes.Hash256(offerID),
|
||||
}
|
||||
nftAccept := transaction.NFTokenAcceptOffer{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftBuyer.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenAcceptOfferTx,
|
||||
},
|
||||
NFTokenSellOffer: txnTypes.Hash256(offerID),
|
||||
}
|
||||
|
||||
response, err := client.SubmitTxAndWait(nftAccept.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftBuyer,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error accepting NFT offer:", err)
|
||||
return
|
||||
}
|
||||
if !response.Validated {
|
||||
fmt.Println("❌ NFTokenAcceptOffer txn is not in a validated ledger", response)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT offer accepted successfully! - 🌎 Hash: ", response.Hash)
|
||||
response, err := client.SubmitTxAndWait(nftAccept.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftBuyer,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error accepting NFT offer:", err)
|
||||
return
|
||||
}
|
||||
if !response.Validated {
|
||||
fmt.Println("❌ NFTokenAcceptOffer txn is not in a validated ledger", response)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT offer accepted successfully! - 🌎 Hash: ", response.Hash)
|
||||
}
|
||||
|
||||
@@ -1,133 +1,133 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"fmt"
|
||||
|
||||
"github.com/Peersyst/xrpl-go/pkg/crypto"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
||||
txnTypes "github.com/Peersyst/xrpl-go/xrpl/transaction/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/websocket"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/websocket/types"
|
||||
"github.com/Peersyst/xrpl-go/pkg/crypto"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
||||
txnTypes "github.com/Peersyst/xrpl-go/xrpl/transaction/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/websocket"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/websocket/types"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Connect to the XRPL devnet
|
||||
fmt.Println("⏳ Connecting to devnet...")
|
||||
client := websocket.NewClient(
|
||||
websocket.NewClientConfig().
|
||||
WithHost("wss://s.devnet.rippletest.net:51233").
|
||||
WithFaucetProvider(faucet.NewDevnetFaucetProvider()),
|
||||
)
|
||||
defer client.Disconnect()
|
||||
// Connect to the XRPL devnet
|
||||
fmt.Println("⏳ Connecting to devnet...")
|
||||
client := websocket.NewClient(
|
||||
websocket.NewClientConfig().
|
||||
WithHost("wss://s.devnet.rippletest.net:51233").
|
||||
WithFaucetProvider(faucet.NewDevnetFaucetProvider()),
|
||||
)
|
||||
defer client.Disconnect()
|
||||
|
||||
if err := client.Connect(); err != nil {
|
||||
fmt.Println("❌ Error connecting to devnet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.Connect(); err != nil {
|
||||
fmt.Println("❌ Error connecting to devnet:", err)
|
||||
return
|
||||
}
|
||||
|
||||
if !client.IsConnected() {
|
||||
fmt.Println("❌ Failed to connect to devnet")
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ Connected to devnet")
|
||||
fmt.Println()
|
||||
if !client.IsConnected() {
|
||||
fmt.Println("❌ Failed to connect to devnet")
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ Connected to devnet")
|
||||
fmt.Println()
|
||||
|
||||
// Fund wallets
|
||||
fmt.Println("⏳ Funding wallets...")
|
||||
// Fund wallets
|
||||
fmt.Println("⏳ Funding wallets...")
|
||||
|
||||
// Create and fund the NFT minter wallet
|
||||
nftMinter, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftMinter); err != nil {
|
||||
fmt.Println("❌ Error funding NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT minter wallet funded!")
|
||||
// Create and fund the NFT minter wallet
|
||||
nftMinter, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftMinter); err != nil {
|
||||
fmt.Println("❌ Error funding NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT minter wallet funded!")
|
||||
|
||||
// Create and fund the NFT buyer wallet
|
||||
nftBuyer, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating NFT buyer wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftBuyer); err != nil {
|
||||
fmt.Println("❌ Error funding NFT buyer wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT buyer wallet funded!")
|
||||
fmt.Println()
|
||||
// Create and fund the NFT buyer wallet
|
||||
nftBuyer, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating NFT buyer wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftBuyer); err != nil {
|
||||
fmt.Println("❌ Error funding NFT buyer wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT buyer wallet funded!")
|
||||
fmt.Println()
|
||||
|
||||
// Mint an NFT
|
||||
fmt.Println("⏳ Minting NFT...")
|
||||
nftMint := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
Destination: nftBuyer.ClassicAddress,
|
||||
Amount: txnTypes.XRPCurrencyAmount(1000000), // 1 XRP
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint.SetTransferableFlag()
|
||||
// Mint an NFT
|
||||
fmt.Println("⏳ Minting NFT...")
|
||||
nftMint := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
Destination: nftBuyer.ClassicAddress,
|
||||
Amount: txnTypes.XRPCurrencyAmount(1000000), // 1 XRP
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint.SetTransferableFlag()
|
||||
|
||||
responseMint, err := client.SubmitTxAndWait(nftMint.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ NFTokenMint transaction is not in a validated ledger:", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT minted successfully! - 🌎 Hash:", responseMint.Hash)
|
||||
fmt.Println()
|
||||
responseMint, err := client.SubmitTxAndWait(nftMint.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ NFTokenMint transaction is not in a validated ledger:", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT minted successfully! - 🌎 Hash:", responseMint.Hash)
|
||||
fmt.Println()
|
||||
|
||||
// Extract the NFT token offer ID from the transaction metadata
|
||||
fmt.Println("⏳ Extracting offer ID...")
|
||||
metaMap, ok := responseMint.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
// Extract the NFT token offer ID from the transaction metadata
|
||||
fmt.Println("⏳ Extracting offer ID...")
|
||||
metaMap, ok := responseMint.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
|
||||
offerID, ok := metaMap["offer_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ offer_id not found or not a string")
|
||||
return
|
||||
}
|
||||
fmt.Println("🌎 offer_id:", offerID)
|
||||
fmt.Println()
|
||||
offerID, ok := metaMap["offer_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ offer_id not found or not a string")
|
||||
return
|
||||
}
|
||||
fmt.Println("🌎 offer_id:", offerID)
|
||||
fmt.Println()
|
||||
|
||||
// Accept the NFT offer
|
||||
fmt.Println("⏳ Accepting NFT offer...")
|
||||
nftAccept := transaction.NFTokenAcceptOffer{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftBuyer.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenAcceptOfferTx,
|
||||
},
|
||||
NFTokenSellOffer: txnTypes.Hash256(offerID),
|
||||
}
|
||||
// Accept the NFT offer
|
||||
fmt.Println("⏳ Accepting NFT offer...")
|
||||
nftAccept := transaction.NFTokenAcceptOffer{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftBuyer.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenAcceptOfferTx,
|
||||
},
|
||||
NFTokenSellOffer: txnTypes.Hash256(offerID),
|
||||
}
|
||||
|
||||
response, err := client.SubmitTxAndWait(nftAccept.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftBuyer,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error accepting NFT offer:", err)
|
||||
return
|
||||
}
|
||||
if !response.Validated {
|
||||
fmt.Println("❌ NFTokenAcceptOffer transaction is not in a validated ledger:", response)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT offer accepted successfully! - 🌎 Hash:", response.Hash)
|
||||
response, err := client.SubmitTxAndWait(nftAccept.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftBuyer,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error accepting NFT offer:", err)
|
||||
return
|
||||
}
|
||||
if !response.Validated {
|
||||
fmt.Println("❌ NFTokenAcceptOffer transaction is not in a validated ledger:", response)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT offer accepted successfully! - 🌎 Hash:", response.Hash)
|
||||
}
|
||||
|
||||
@@ -1,114 +1,114 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"fmt"
|
||||
|
||||
"github.com/Peersyst/xrpl-go/pkg/crypto"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/rpc"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/rpc/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
||||
txnTypes "github.com/Peersyst/xrpl-go/xrpl/transaction/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
||||
"github.com/Peersyst/xrpl-go/pkg/crypto"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/rpc"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/rpc/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
||||
txnTypes "github.com/Peersyst/xrpl-go/xrpl/transaction/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Initialize the RPC client configuration
|
||||
cfg, err := rpc.NewClientConfig(
|
||||
"https://s.devnet.rippletest.net:51234/",
|
||||
rpc.WithFaucetProvider(faucet.NewDevnetFaucetProvider()),
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
// Initialize the RPC client configuration
|
||||
cfg, err := rpc.NewClientConfig(
|
||||
"https://s.devnet.rippletest.net:51234/",
|
||||
rpc.WithFaucetProvider(faucet.NewDevnetFaucetProvider()),
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Create the RPC client
|
||||
client := rpc.NewClient(cfg)
|
||||
// Create the RPC client
|
||||
client := rpc.NewClient(cfg)
|
||||
|
||||
// Step 1: Fund wallets
|
||||
fmt.Println("⏳ Funding wallets...")
|
||||
// Step 1: Fund wallets
|
||||
fmt.Println("⏳ Funding wallets...")
|
||||
|
||||
// Create and fund the NFT minter wallet
|
||||
nftMinter, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftMinter); err != nil {
|
||||
fmt.Println("❌ Error funding NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT minter wallet funded!")
|
||||
fmt.Println()
|
||||
// Create and fund the NFT minter wallet
|
||||
nftMinter, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftMinter); err != nil {
|
||||
fmt.Println("❌ Error funding NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT minter wallet funded!")
|
||||
fmt.Println()
|
||||
|
||||
// Step 2: Mint an NFT
|
||||
fmt.Println("⏳ Minting NFT...")
|
||||
// Step 2: Mint an NFT
|
||||
fmt.Println("⏳ Minting NFT...")
|
||||
|
||||
nftMint := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint.SetTransferableFlag()
|
||||
nftMint := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint.SetTransferableFlag()
|
||||
|
||||
responseMint, err := client.SubmitTxAndWait(nftMint.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ NFTokenMint txn is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
responseMint, err := client.SubmitTxAndWait(nftMint.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ NFTokenMint txn is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
|
||||
// Step 3: Retrieve the token ID
|
||||
fmt.Println("⏳ Retrieving NFT ID...")
|
||||
// Step 3: Retrieve the token ID
|
||||
fmt.Println("⏳ Retrieving NFT ID...")
|
||||
|
||||
metaMap, ok := responseMint.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
metaMap, ok := responseMint.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
|
||||
nftokenID, ok := metaMap["nftoken_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ nftoken_id not found or not a string")
|
||||
return
|
||||
}
|
||||
nftokenID, ok := metaMap["nftoken_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ nftoken_id not found or not a string")
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("🌎 nftoken_id:", nftokenID)
|
||||
fmt.Println()
|
||||
fmt.Println("🌎 nftoken_id:", nftokenID)
|
||||
fmt.Println()
|
||||
|
||||
// Step 4: Burn the NFT
|
||||
fmt.Println("⏳ Burn the NFT...")
|
||||
// Step 4: Burn the NFT
|
||||
fmt.Println("⏳ Burn the NFT...")
|
||||
|
||||
nftBurn := transaction.NFTokenBurn{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenAcceptOfferTx,
|
||||
},
|
||||
NFTokenID: txnTypes.NFTokenID(nftokenID),
|
||||
}
|
||||
nftBurn := transaction.NFTokenBurn{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenAcceptOfferTx,
|
||||
},
|
||||
NFTokenID: txnTypes.NFTokenID(nftokenID),
|
||||
}
|
||||
|
||||
responseBurn, err := client.SubmitTxAndWait(nftBurn.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error burning NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseBurn.Validated {
|
||||
fmt.Println("❌ NFTokenBurn transactiob is not in a validated ledger", responseBurn)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT burned successfully! - 🌎 Hash: ", responseBurn.Hash)
|
||||
responseBurn, err := client.SubmitTxAndWait(nftBurn.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error burning NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseBurn.Validated {
|
||||
fmt.Println("❌ NFTokenBurn transactiob is not in a validated ledger", responseBurn)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT burned successfully! - 🌎 Hash: ", responseBurn.Hash)
|
||||
}
|
||||
|
||||
@@ -1,123 +1,123 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"fmt"
|
||||
|
||||
"github.com/Peersyst/xrpl-go/pkg/crypto"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
||||
txnTypes "github.com/Peersyst/xrpl-go/xrpl/transaction/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/websocket"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/websocket/types"
|
||||
"github.com/Peersyst/xrpl-go/pkg/crypto"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
||||
txnTypes "github.com/Peersyst/xrpl-go/xrpl/transaction/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/websocket"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/websocket/types"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Connect to the XRPL devnet
|
||||
fmt.Println("⏳ Connecting to devnet...")
|
||||
client := websocket.NewClient(
|
||||
websocket.NewClientConfig().
|
||||
WithHost("wss://s.devnet.rippletest.net:51233").
|
||||
WithFaucetProvider(faucet.NewDevnetFaucetProvider()),
|
||||
)
|
||||
defer client.Disconnect()
|
||||
// Connect to the XRPL devnet
|
||||
fmt.Println("⏳ Connecting to devnet...")
|
||||
client := websocket.NewClient(
|
||||
websocket.NewClientConfig().
|
||||
WithHost("wss://s.devnet.rippletest.net:51233").
|
||||
WithFaucetProvider(faucet.NewDevnetFaucetProvider()),
|
||||
)
|
||||
defer client.Disconnect()
|
||||
|
||||
if err := client.Connect(); err != nil {
|
||||
fmt.Println("❌ Error connecting to devnet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.Connect(); err != nil {
|
||||
fmt.Println("❌ Error connecting to devnet:", err)
|
||||
return
|
||||
}
|
||||
|
||||
if !client.IsConnected() {
|
||||
fmt.Println("❌ Failed to connect to devnet")
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ Connected to devnet")
|
||||
fmt.Println()
|
||||
if !client.IsConnected() {
|
||||
fmt.Println("❌ Failed to connect to devnet")
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ Connected to devnet")
|
||||
fmt.Println()
|
||||
|
||||
// Step 1: Fund wallets
|
||||
fmt.Println("⏳ Funding wallets...")
|
||||
// Step 1: Fund wallets
|
||||
fmt.Println("⏳ Funding wallets...")
|
||||
|
||||
// Create and fund the NFT minter wallet
|
||||
nftMinter, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftMinter); err != nil {
|
||||
fmt.Println("❌ Error funding NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT minter wallet funded!")
|
||||
fmt.Println()
|
||||
// Create and fund the NFT minter wallet
|
||||
nftMinter, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftMinter); err != nil {
|
||||
fmt.Println("❌ Error funding NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT minter wallet funded!")
|
||||
fmt.Println()
|
||||
|
||||
// Step 2: Mint an NFT
|
||||
fmt.Println("⏳ Minting NFT...")
|
||||
// Step 2: Mint an NFT
|
||||
fmt.Println("⏳ Minting NFT...")
|
||||
|
||||
nftMint := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint.SetTransferableFlag()
|
||||
nftMint := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint.SetTransferableFlag()
|
||||
|
||||
responseMint, err := client.SubmitTxAndWait(nftMint.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ NFTokenMint txn is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
responseMint, err := client.SubmitTxAndWait(nftMint.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ NFTokenMint txn is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
|
||||
// Step 3: Retrieve the token ID
|
||||
fmt.Println("⏳ Retrieving NFT ID...")
|
||||
// Step 3: Retrieve the token ID
|
||||
fmt.Println("⏳ Retrieving NFT ID...")
|
||||
|
||||
metaMap, ok := responseMint.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
metaMap, ok := responseMint.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
|
||||
nftokenID, ok := metaMap["nftoken_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ nftoken_id not found or not a string")
|
||||
return
|
||||
}
|
||||
nftokenID, ok := metaMap["nftoken_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ nftoken_id not found or not a string")
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("🌎 nftoken_id:", nftokenID)
|
||||
fmt.Println()
|
||||
fmt.Println("🌎 nftoken_id:", nftokenID)
|
||||
fmt.Println()
|
||||
|
||||
// Step 4: Burn the NFT
|
||||
fmt.Println("⏳ Burn the NFT...")
|
||||
// Step 4: Burn the NFT
|
||||
fmt.Println("⏳ Burn the NFT...")
|
||||
|
||||
nftBurn := transaction.NFTokenBurn{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenAcceptOfferTx,
|
||||
},
|
||||
NFTokenID: txnTypes.NFTokenID(nftokenID),
|
||||
}
|
||||
nftBurn := transaction.NFTokenBurn{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenAcceptOfferTx,
|
||||
},
|
||||
NFTokenID: txnTypes.NFTokenID(nftokenID),
|
||||
}
|
||||
|
||||
responseBurn, err := client.SubmitTxAndWait(nftBurn.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error burning NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseBurn.Validated {
|
||||
fmt.Println("❌ NFTokenBurn transactiob is not in a validated ledger", responseBurn)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT burned successfully! - 🌎 Hash: ", responseBurn.Hash)
|
||||
responseBurn, err := client.SubmitTxAndWait(nftBurn.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error burning NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseBurn.Validated {
|
||||
fmt.Println("❌ NFTokenBurn transactiob is not in a validated ledger", responseBurn)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT burned successfully! - 🌎 Hash: ", responseBurn.Hash)
|
||||
}
|
||||
|
||||
@@ -1,163 +1,163 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"fmt"
|
||||
|
||||
"github.com/Peersyst/xrpl-go/pkg/crypto"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/rpc"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/rpc/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
||||
txnTypes "github.com/Peersyst/xrpl-go/xrpl/transaction/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
||||
"github.com/Peersyst/xrpl-go/pkg/crypto"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/rpc"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/rpc/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
||||
txnTypes "github.com/Peersyst/xrpl-go/xrpl/transaction/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Initialize the RPC client configuration
|
||||
cfg, err := rpc.NewClientConfig(
|
||||
"https://s.devnet.rippletest.net:51234/",
|
||||
rpc.WithFaucetProvider(faucet.NewDevnetFaucetProvider()),
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
// Initialize the RPC client configuration
|
||||
cfg, err := rpc.NewClientConfig(
|
||||
"https://s.devnet.rippletest.net:51234/",
|
||||
rpc.WithFaucetProvider(faucet.NewDevnetFaucetProvider()),
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Create the RPC client
|
||||
client := rpc.NewClient(cfg)
|
||||
// Create the RPC client
|
||||
client := rpc.NewClient(cfg)
|
||||
|
||||
// Step 1: Fund wallet
|
||||
fmt.Println("⏳ Funding wallet...")
|
||||
// Step 1: Fund wallet
|
||||
fmt.Println("⏳ Funding wallet...")
|
||||
|
||||
// Create and fund the NFT minter wallet
|
||||
nftMinter, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftMinter); err != nil {
|
||||
fmt.Println("❌ Error funding NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT minter wallet funded!")
|
||||
// Create and fund the NFT minter wallet
|
||||
nftMinter, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftMinter); err != nil {
|
||||
fmt.Println("❌ Error funding NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT minter wallet funded!")
|
||||
|
||||
// Step 2: Mint two NFTs
|
||||
fmt.Println("⏳ Minting first NFT...")
|
||||
// Step 2: Mint two NFTs
|
||||
fmt.Println("⏳ Minting first NFT...")
|
||||
|
||||
nftMint := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint.SetTransferableFlag()
|
||||
nftMint := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint.SetTransferableFlag()
|
||||
|
||||
responseMint, err := client.SubmitTxAndWait(nftMint.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting first NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ First NFTokenMint transaction is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ First NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
responseMint, err := client.SubmitTxAndWait(nftMint.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting first NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ First NFTokenMint transaction is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ First NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
|
||||
// Step 3: Retrieve the NFT token ID
|
||||
fmt.Println("⏳ Retrieving NFT ID...")
|
||||
// Step 3: Retrieve the NFT token ID
|
||||
fmt.Println("⏳ Retrieving NFT ID...")
|
||||
|
||||
metaMap, ok := responseMint.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
metaMap, ok := responseMint.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
|
||||
nftokenID1, ok := metaMap["nftoken_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ nftoken_id not found or not a string")
|
||||
return
|
||||
}
|
||||
nftokenID1, ok := metaMap["nftoken_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ nftoken_id not found or not a string")
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("🌎 nftoken_id:", nftokenID1)
|
||||
fmt.Println()
|
||||
fmt.Println("🌎 nftoken_id:", nftokenID1)
|
||||
fmt.Println()
|
||||
|
||||
// ------
|
||||
// ------
|
||||
|
||||
fmt.Println("⏳ Minting second NFT...")
|
||||
fmt.Println("⏳ Minting second NFT...")
|
||||
|
||||
nftMint2 := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint2.SetTransferableFlag()
|
||||
nftMint2 := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint2.SetTransferableFlag()
|
||||
|
||||
responseMint2, err := client.SubmitTxAndWait(nftMint2.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting second NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ Second NFTokenMint transaction is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ Second NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
responseMint2, err := client.SubmitTxAndWait(nftMint2.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting second NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ Second NFTokenMint transaction is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ Second NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
|
||||
// Step 3: Retrieve the second NFT token ID
|
||||
fmt.Println("⏳ Retrieving second NFT ID...")
|
||||
// Step 3: Retrieve the second NFT token ID
|
||||
fmt.Println("⏳ Retrieving second NFT ID...")
|
||||
|
||||
metaMap2, ok := responseMint2.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
metaMap2, ok := responseMint2.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
|
||||
nftokenID2, ok := metaMap2["nftoken_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ nftoken_id not found or not a string")
|
||||
return
|
||||
}
|
||||
nftokenID2, ok := metaMap2["nftoken_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ nftoken_id not found or not a string")
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("🌎 nftoken_id:", nftokenID2)
|
||||
fmt.Println()
|
||||
fmt.Println("🌎 nftoken_id:", nftokenID2)
|
||||
fmt.Println()
|
||||
|
||||
// Step 4: Cancel the NFT offers
|
||||
fmt.Println("⏳ Canceling NFT offers...")
|
||||
// Step 4: Cancel the NFT offers
|
||||
fmt.Println("⏳ Canceling NFT offers...")
|
||||
|
||||
nftCancel := transaction.NFTokenCancelOffer{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenAcceptOfferTx,
|
||||
},
|
||||
NFTokenOffers: []txnTypes.NFTokenID{
|
||||
txnTypes.NFTokenID(nftokenID1),
|
||||
txnTypes.NFTokenID(nftokenID2),
|
||||
},
|
||||
}
|
||||
nftCancel := transaction.NFTokenCancelOffer{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenAcceptOfferTx,
|
||||
},
|
||||
NFTokenOffers: []txnTypes.NFTokenID{
|
||||
txnTypes.NFTokenID(nftokenID1),
|
||||
txnTypes.NFTokenID(nftokenID2),
|
||||
},
|
||||
}
|
||||
|
||||
response, err := client.SubmitTxAndWait(nftCancel.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error canceling NFT offers:", err)
|
||||
return
|
||||
}
|
||||
if !response.Validated {
|
||||
fmt.Println("❌ NFTokenCancelOffer transaction is not in a validated ledger", response)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT offers canceled successfully! - 🌎 Hash: ", response.Hash)
|
||||
response, err := client.SubmitTxAndWait(nftCancel.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error canceling NFT offers:", err)
|
||||
return
|
||||
}
|
||||
if !response.Validated {
|
||||
fmt.Println("❌ NFTokenCancelOffer transaction is not in a validated ledger", response)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT offers canceled successfully! - 🌎 Hash: ", response.Hash)
|
||||
}
|
||||
|
||||
@@ -1,172 +1,172 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"fmt"
|
||||
|
||||
"github.com/Peersyst/xrpl-go/pkg/crypto"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
||||
txnTypes "github.com/Peersyst/xrpl-go/xrpl/transaction/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/websocket"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/websocket/types"
|
||||
"github.com/Peersyst/xrpl-go/pkg/crypto"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
||||
txnTypes "github.com/Peersyst/xrpl-go/xrpl/transaction/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/websocket"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/websocket/types"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Connect to the XRPL devnet
|
||||
fmt.Println("⏳ Connecting to devnet...")
|
||||
client := websocket.NewClient(
|
||||
websocket.NewClientConfig().
|
||||
WithHost("wss://s.devnet.rippletest.net:51233").
|
||||
WithFaucetProvider(faucet.NewDevnetFaucetProvider()),
|
||||
)
|
||||
defer client.Disconnect()
|
||||
// Connect to the XRPL devnet
|
||||
fmt.Println("⏳ Connecting to devnet...")
|
||||
client := websocket.NewClient(
|
||||
websocket.NewClientConfig().
|
||||
WithHost("wss://s.devnet.rippletest.net:51233").
|
||||
WithFaucetProvider(faucet.NewDevnetFaucetProvider()),
|
||||
)
|
||||
defer client.Disconnect()
|
||||
|
||||
if err := client.Connect(); err != nil {
|
||||
fmt.Println("❌ Error connecting to devnet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.Connect(); err != nil {
|
||||
fmt.Println("❌ Error connecting to devnet:", err)
|
||||
return
|
||||
}
|
||||
|
||||
if !client.IsConnected() {
|
||||
fmt.Println("❌ Failed to connect to devnet")
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ Connected to devnet")
|
||||
fmt.Println()
|
||||
if !client.IsConnected() {
|
||||
fmt.Println("❌ Failed to connect to devnet")
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ Connected to devnet")
|
||||
fmt.Println()
|
||||
|
||||
// Step 1: Fund wallet
|
||||
fmt.Println("⏳ Funding wallet...")
|
||||
// Step 1: Fund wallet
|
||||
fmt.Println("⏳ Funding wallet...")
|
||||
|
||||
// Create and fund the NFT minter wallet
|
||||
nftMinter, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftMinter); err != nil {
|
||||
fmt.Println("❌ Error funding NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT minter wallet funded!")
|
||||
// Create and fund the NFT minter wallet
|
||||
nftMinter, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftMinter); err != nil {
|
||||
fmt.Println("❌ Error funding NFT minter wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT minter wallet funded!")
|
||||
|
||||
// Step 2: Mint two NFTs
|
||||
fmt.Println("⏳ Minting first NFT...")
|
||||
// Step 2: Mint two NFTs
|
||||
fmt.Println("⏳ Minting first NFT...")
|
||||
|
||||
nftMint := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint.SetTransferableFlag()
|
||||
nftMint := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint.SetTransferableFlag()
|
||||
|
||||
responseMint, err := client.SubmitTxAndWait(nftMint.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting first NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ First NFTokenMint transaction is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ First NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
responseMint, err := client.SubmitTxAndWait(nftMint.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting first NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ First NFTokenMint transaction is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ First NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
|
||||
// Step 3: Retrieve the NFT token ID
|
||||
fmt.Println("⏳ Retrieving NFT ID...")
|
||||
// Step 3: Retrieve the NFT token ID
|
||||
fmt.Println("⏳ Retrieving NFT ID...")
|
||||
|
||||
metaMap, ok := responseMint.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
metaMap, ok := responseMint.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
|
||||
nftokenID1, ok := metaMap["nftoken_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ nftoken_id not found or not a string")
|
||||
return
|
||||
}
|
||||
nftokenID1, ok := metaMap["nftoken_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ nftoken_id not found or not a string")
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("🌎 nftoken_id:", nftokenID1)
|
||||
fmt.Println()
|
||||
fmt.Println("🌎 nftoken_id:", nftokenID1)
|
||||
fmt.Println()
|
||||
|
||||
// ------
|
||||
// ------
|
||||
|
||||
fmt.Println("⏳ Minting second NFT...")
|
||||
fmt.Println("⏳ Minting second NFT...")
|
||||
|
||||
nftMint2 := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint2.SetTransferableFlag()
|
||||
nftMint2 := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint2.SetTransferableFlag()
|
||||
|
||||
responseMint2, err := client.SubmitTxAndWait(nftMint2.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting second NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ Second NFTokenMint transaction is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ Second NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
responseMint2, err := client.SubmitTxAndWait(nftMint2.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting second NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ Second NFTokenMint transaction is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ Second NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
|
||||
// Step 3: Retrieve the second NFT token ID
|
||||
fmt.Println("⏳ Retrieving second NFT ID...")
|
||||
// Step 3: Retrieve the second NFT token ID
|
||||
fmt.Println("⏳ Retrieving second NFT ID...")
|
||||
|
||||
metaMap2, ok := responseMint2.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
metaMap2, ok := responseMint2.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
|
||||
nftokenID2, ok := metaMap2["nftoken_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ nftoken_id not found or not a string")
|
||||
return
|
||||
}
|
||||
nftokenID2, ok := metaMap2["nftoken_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ nftoken_id not found or not a string")
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("🌎 nftoken_id:", nftokenID2)
|
||||
fmt.Println()
|
||||
fmt.Println("🌎 nftoken_id:", nftokenID2)
|
||||
fmt.Println()
|
||||
|
||||
// Step 4: Cancel the NFT offers
|
||||
fmt.Println("⏳ Canceling NFT offers...")
|
||||
// Step 4: Cancel the NFT offers
|
||||
fmt.Println("⏳ Canceling NFT offers...")
|
||||
|
||||
nftCancel := transaction.NFTokenCancelOffer{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenAcceptOfferTx,
|
||||
},
|
||||
NFTokenOffers: []txnTypes.NFTokenID{
|
||||
txnTypes.NFTokenID(nftokenID1),
|
||||
txnTypes.NFTokenID(nftokenID2),
|
||||
},
|
||||
}
|
||||
nftCancel := transaction.NFTokenCancelOffer{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftMinter.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenAcceptOfferTx,
|
||||
},
|
||||
NFTokenOffers: []txnTypes.NFTokenID{
|
||||
txnTypes.NFTokenID(nftokenID1),
|
||||
txnTypes.NFTokenID(nftokenID2),
|
||||
},
|
||||
}
|
||||
|
||||
response, err := client.SubmitTxAndWait(nftCancel.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error canceling NFT offers:", err)
|
||||
return
|
||||
}
|
||||
if !response.Validated {
|
||||
fmt.Println("❌ NFTokenCancelOffer transaction is not in a validated ledger", response)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT offers canceled successfully! - 🌎 Hash: ", response.Hash)
|
||||
response, err := client.SubmitTxAndWait(nftCancel.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftMinter,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error canceling NFT offers:", err)
|
||||
return
|
||||
}
|
||||
if !response.Validated {
|
||||
fmt.Println("❌ NFTokenCancelOffer transaction is not in a validated ledger", response)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT offers canceled successfully! - 🌎 Hash: ", response.Hash)
|
||||
}
|
||||
|
||||
@@ -1,107 +1,107 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"fmt"
|
||||
|
||||
"github.com/Peersyst/xrpl-go/pkg/crypto"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/rpc"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/rpc/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
||||
txnTypes "github.com/Peersyst/xrpl-go/xrpl/transaction/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
||||
"github.com/Peersyst/xrpl-go/pkg/crypto"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/rpc"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/rpc/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
||||
txnTypes "github.com/Peersyst/xrpl-go/xrpl/transaction/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
||||
)
|
||||
|
||||
func main() {
|
||||
cfg, err := rpc.NewClientConfig(
|
||||
"https://s.devnet.rippletest.net:51234/",
|
||||
rpc.WithFaucetProvider(faucet.NewDevnetFaucetProvider()),
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
cfg, err := rpc.NewClientConfig(
|
||||
"https://s.devnet.rippletest.net:51234/",
|
||||
rpc.WithFaucetProvider(faucet.NewDevnetFaucetProvider()),
|
||||
)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
client := rpc.NewClient(cfg)
|
||||
fmt.Println()
|
||||
client := rpc.NewClient(cfg)
|
||||
fmt.Println()
|
||||
|
||||
fmt.Println("⏳ Funding wallet...")
|
||||
fmt.Println("⏳ Funding wallet...")
|
||||
|
||||
// Create and fund the nft wallet
|
||||
nftWallet, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating nft wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftWallet); err != nil {
|
||||
fmt.Println("❌ Error funding nft wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT wallet funded! - #️⃣: ", nftWallet.ClassicAddress)
|
||||
fmt.Println()
|
||||
// Create and fund the nft wallet
|
||||
nftWallet, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating nft wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftWallet); err != nil {
|
||||
fmt.Println("❌ Error funding nft wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT wallet funded! - #️⃣: ", nftWallet.ClassicAddress)
|
||||
fmt.Println()
|
||||
|
||||
// Mint NFT
|
||||
nftMint := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftWallet.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint.SetMutableFlag()
|
||||
nftMint.SetTransferableFlag()
|
||||
// Mint NFT
|
||||
nftMint := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftWallet.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint.SetMutableFlag()
|
||||
nftMint.SetTransferableFlag()
|
||||
|
||||
responseMint, err := client.SubmitTxAndWait(nftMint.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftWallet,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ NFTokenMint txn is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
responseMint, err := client.SubmitTxAndWait(nftMint.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftWallet,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ NFTokenMint txn is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
|
||||
metaMap, ok := responseMint.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
metaMap, ok := responseMint.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
|
||||
nftokenID, ok := metaMap["nftoken_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ nftoken_id not found or not a string")
|
||||
return
|
||||
}
|
||||
nftokenID, ok := metaMap["nftoken_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ nftoken_id not found or not a string")
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("🌎 nftoken_id:", nftokenID)
|
||||
fmt.Println()
|
||||
fmt.Println("🌎 nftoken_id:", nftokenID)
|
||||
fmt.Println()
|
||||
|
||||
// Update NFT
|
||||
nftModify := transaction.NFTokenModify{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftWallet.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenModifyTx,
|
||||
},
|
||||
URI: "68747470733A2F2F7961686F6F2E636F6D", // https://yahoo.com
|
||||
NFTokenID: txnTypes.NFTokenID(nftokenID),
|
||||
}
|
||||
// nftoken_id
|
||||
responseModify, err := client.SubmitTxAndWait(nftModify.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftWallet,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error modifying NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseModify.Validated {
|
||||
fmt.Println("❌ NFTokenModify txn is not in a validated ledger", responseModify)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT URI modified successfully! - 🌎 Hash: ", responseModify.Hash)
|
||||
// Update NFT
|
||||
nftModify := transaction.NFTokenModify{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftWallet.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenModifyTx,
|
||||
},
|
||||
URI: "68747470733A2F2F7961686F6F2E636F6D", // https://yahoo.com
|
||||
NFTokenID: txnTypes.NFTokenID(nftokenID),
|
||||
}
|
||||
// nftoken_id
|
||||
responseModify, err := client.SubmitTxAndWait(nftModify.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftWallet,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error modifying NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseModify.Validated {
|
||||
fmt.Println("❌ NFTokenModify txn is not in a validated ledger", responseModify)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT URI modified successfully! - 🌎 Hash: ", responseModify.Hash)
|
||||
}
|
||||
|
||||
@@ -1,117 +1,117 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"fmt"
|
||||
|
||||
"github.com/Peersyst/xrpl-go/pkg/crypto"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
||||
txnTypes "github.com/Peersyst/xrpl-go/xrpl/transaction/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/websocket"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/websocket/types"
|
||||
"github.com/Peersyst/xrpl-go/pkg/crypto"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/faucet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/transaction"
|
||||
txnTypes "github.com/Peersyst/xrpl-go/xrpl/transaction/types"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/wallet"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/websocket"
|
||||
"github.com/Peersyst/xrpl-go/xrpl/websocket/types"
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Println("⏳ Connecting to devnet...")
|
||||
client := websocket.NewClient(
|
||||
websocket.NewClientConfig().
|
||||
WithHost("wss://s.devnet.rippletest.net:51233").
|
||||
WithFaucetProvider(faucet.NewDevnetFaucetProvider()),
|
||||
)
|
||||
fmt.Println("⏳ Connecting to devnet...")
|
||||
client := websocket.NewClient(
|
||||
websocket.NewClientConfig().
|
||||
WithHost("wss://s.devnet.rippletest.net:51233").
|
||||
WithFaucetProvider(faucet.NewDevnetFaucetProvider()),
|
||||
)
|
||||
|
||||
defer client.Disconnect()
|
||||
defer client.Disconnect()
|
||||
|
||||
if err := client.Connect(); err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
if err := client.Connect(); err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
if !client.IsConnected() {
|
||||
fmt.Println("❌ Failed to connect to devnet")
|
||||
return
|
||||
}
|
||||
if !client.IsConnected() {
|
||||
fmt.Println("❌ Failed to connect to devnet")
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("✅ Connected to devnet")
|
||||
fmt.Println()
|
||||
fmt.Println("✅ Connected to devnet")
|
||||
fmt.Println()
|
||||
|
||||
// Create and fund the nft wallet
|
||||
fmt.Println("⏳ Funding wallet...")
|
||||
nftWallet, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating nft wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftWallet); err != nil {
|
||||
fmt.Println("❌ Error funding nft wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT wallet funded!")
|
||||
fmt.Println()
|
||||
// Create and fund the nft wallet
|
||||
fmt.Println("⏳ Funding wallet...")
|
||||
nftWallet, err := wallet.New(crypto.ED25519())
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error creating nft wallet:", err)
|
||||
return
|
||||
}
|
||||
if err := client.FundWallet(&nftWallet); err != nil {
|
||||
fmt.Println("❌ Error funding nft wallet:", err)
|
||||
return
|
||||
}
|
||||
fmt.Println("💸 NFT wallet funded!")
|
||||
fmt.Println()
|
||||
|
||||
// Mint NFT
|
||||
nftMint := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftWallet.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint.SetMutableFlag()
|
||||
nftMint.SetTransferableFlag()
|
||||
// Mint NFT
|
||||
nftMint := transaction.NFTokenMint{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftWallet.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenMintTx,
|
||||
},
|
||||
NFTokenTaxon: 0,
|
||||
URI: txnTypes.NFTokenURI("68747470733A2F2F676F6F676C652E636F6D"), // https://google.com
|
||||
}
|
||||
nftMint.SetMutableFlag()
|
||||
nftMint.SetTransferableFlag()
|
||||
|
||||
responseMint, err := client.SubmitTxAndWait(nftMint.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftWallet,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ NFTokenMint txn is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
responseMint, err := client.SubmitTxAndWait(nftMint.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftWallet,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error minting NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseMint.Validated {
|
||||
fmt.Println("❌ NFTokenMint txn is not in a validated ledger", responseMint)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT minted successfully! - 🌎 Hash: ", responseMint.Hash)
|
||||
fmt.Println()
|
||||
|
||||
metaMap, ok := responseMint.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
metaMap, ok := responseMint.Meta.(map[string]any)
|
||||
if !ok {
|
||||
fmt.Println("❌ Meta is not a map[string]any")
|
||||
return
|
||||
}
|
||||
|
||||
nftokenID, ok := metaMap["nftoken_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ nftoken_id not found or not a string")
|
||||
return
|
||||
}
|
||||
nftokenID, ok := metaMap["nftoken_id"].(string)
|
||||
if !ok {
|
||||
fmt.Println("❌ nftoken_id not found or not a string")
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("🌎 nftoken_id:", nftokenID)
|
||||
fmt.Println()
|
||||
fmt.Println("🌎 nftoken_id:", nftokenID)
|
||||
fmt.Println()
|
||||
|
||||
// Update NFT
|
||||
nftModify := transaction.NFTokenModify{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftWallet.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenModifyTx,
|
||||
},
|
||||
URI: "68747470733A2F2F7961686F6F2E636F6D", // https://yahoo.com
|
||||
NFTokenID: txnTypes.NFTokenID(nftokenID),
|
||||
}
|
||||
// Update NFT
|
||||
nftModify := transaction.NFTokenModify{
|
||||
BaseTx: transaction.BaseTx{
|
||||
Account: nftWallet.ClassicAddress,
|
||||
TransactionType: transaction.NFTokenModifyTx,
|
||||
},
|
||||
URI: "68747470733A2F2F7961686F6F2E636F6D", // https://yahoo.com
|
||||
NFTokenID: txnTypes.NFTokenID(nftokenID),
|
||||
}
|
||||
|
||||
responseModify, err := client.SubmitTxAndWait(nftModify.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftWallet,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error modifying NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseModify.Validated {
|
||||
fmt.Println("❌ NFTokenModify txn is not in a validated ledger", responseModify)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT URI modified successfully! - 🌎 Hash: ", responseModify.Hash)
|
||||
responseModify, err := client.SubmitTxAndWait(nftModify.Flatten(), &types.SubmitOptions{
|
||||
Autofill: true,
|
||||
Wallet: &nftWallet,
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Println("❌ Error modifying NFT:", err)
|
||||
return
|
||||
}
|
||||
if !responseModify.Validated {
|
||||
fmt.Println("❌ NFTokenModify txn is not in a validated ledger", responseModify)
|
||||
return
|
||||
}
|
||||
fmt.Println("✅ NFT URI modified successfully! - 🌎 Hash: ", responseModify.Hash)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user