mirror of
https://github.com/XRPLF/xrpl-dev-portal.git
synced 2025-11-25 06:05:51 +00:00
* Update look up escrows to remove redundant info about lookups via sender/destination. Modify cancel expired escrow for brevity. * Cancel escrow: fix notes * Add draft of updated cancel-escrow.js. * Update intro to escrows. * Add Escrow Tutorial * Minor corrections * Fix headings, add HTML * Update escrow docs This commit re-createsf205a92db2with some adjustments: - Omit the accidentally-created dir full of junk - Fix some typos and one mistake in the Escrow limitations section - Add a table to the EscrowCreate ref to clarify valid combos of fields. * Concept info from send-a-time-held-escrow added to escrow.md * IA: Move "Consensus Network" files This re-creates some work from the original commit56fffe0b9f* Rewrite escrows article (re-created) This commit re-creates relevant work from the following commits:9a4a588f2bUpdate escrow.md context infoe1b017dc83Remove references to using escrow for interledger payments. * IA: Move "XRPL servers" files This re-creates some work from original commit7611979abf* IA: move "production readiness" files. Re-creates work from the following commit:692438693aMove tutorials to concepts * New intro articles Original commit:56fffe0b9f* IA: Reorg account concepts Re-creates some work from original commit56fffe0b9f* IA: reorg transaction concepts Original commits:9d4eff9940WIP - reorg accounts7611979abfWIP dir. reorg * IA: reorg consensus concepts Original commit:56fffe0b9f* IA: Reorg ledger docs Original commit:56fffe0b9f- Rephrased some details of the section * IA: rename issuing/operational addresses page Original commit:56fffe0b9f* Moving use cases * Fleshing out Use Cases Note, the dactyl-config.yml file has not been fully updated. * Clean up checks conceptual info. * Remove redundant checks use case section Original commit:3c29e9c05e* IA: move Dex under tokens Original commit:d08b3ba7d7* Touch up stablecoin issuer use case (#1856) * Consolidate stablecoin use case * Stablecoin issuer: cleanup progress through sending * Stablecoin issuer: reorg second half (Note: the dactyl-config.yml is not fully reconciled yet) * Move rippled and clio tutorials into infrastructure * Remove link to checks amendement. * Add note to account_objects.md about commandline interface type field. * Merge expiration case with lifecycle section. * Interoperability Use Cases * Add graphics to intro * Move escrow use cases to dedicated page. * Update use case page intros and corresponding concept info. * Clarify meaning of direct XRP payments. * Intro link updates * Payment use cases * Remove some unnecessary links in transactions section Original commit:e6fcf4a4dc* Link cleanup in Tokens section Original commit:9588dd5e70* Touch up 'Configure Peering' section Original commit:fc8f0990b8* Clean up links in accounts section Original commit:3da5fde7a8* Add NFT mkt use case * p2p payments: edits to Wallets * Clean up payments use cases * Refine history description * IA: use case cleanup * IA: reconcile servers, ledgers sections * IA: reconcile payment types, tx, tokens * IA: reconcile accounts section * IA: reconcile infra * IA: Fix most broken links * Full Docs Index: omit from sidebar * IA: fix up most broken links * fix Absolute path link to internal content * Quick updates to Software Ecosystem * Remove some absolute links to internal resources * Fix remaining broken links in JA target * Contributing: tweak formatting * Tutorials: fix some minor issues * remove interop use cases * remove intro image and personal references to dennis * alphabetize-transaction-nav * Remove unused files * Add QS escrow tutorials * IA: move ledgers, consensus protocol files around * IA: update nav for new page hierarchy * reordering of topics under new networks and servers top-nav * Move "Naming" to "What is XRP?" * Update dactyl-config.yml Remove xrp.md from the TOC. * Update list-xrp-as-an-exchange.md Update link to what-is-xrp * Update list-xrp-as-an-exchange.ja.md Change link to what-is-xrp * Update currency-formats.md Change link to what-is-xrp * Update currency-formats.ja.md Change link to what-is-xrp * Update cancel-an-expired-escrow.md Change link to what-is-xrp * Update paymentchannelfund.md Change link to what-is-xml * Update look-up-escrows.md Change link to what-is-xrp * Update tokens.md change link to what-is-xrp * Update use-payment-channels.md * Update send-a-time-held-escrow.md Update link to what-is-xml * fix broken links * Update parallel-networks.md Change link to what-is-xml * Update parallel-networks.ja.md * Update invariant-checking.md Remove link to xrp.html * Update invariant-checking.ja.md Remove link to xrp.html * Update transaction-cost.md Change link to what-is-xrp * Update transaction-cost.ja.md Change link to what-is-xrp * Update send-a-conditionally-held-escrow.md Change link to what-is-xrp * Update stablecoin-issuer.md Change link to what-is-xrp * Update tokens.ja.md Change link to what-is-xml * Update autobridging.ja.md Change link to what-is-xrp * Update currency-formats.md update text * reorganize infrastructure nav section * Update currency-formats.md Try removing link altogether. * Update currency-formats.ja.md Remove link to what-is-xrp.html * move commandline usage topic to infrastructure * initial intro rewrite * minor update to language * IA.v3: rm Production Readiness * Delete xrp.md * Update xrp link in snippet * Add redirect for old xrp.html URL * Small edits to 'What is XRP?' article * Add missing imgs * XRP - copy edit per @DennisDawson * restructure tutorials nav and pages * fix broken links * more broken link fixes * Algo trading: 1st draft * Algo trading: notes on taxes * Algo trading: edits per review * algo trading: fix broken link * Ledger structure: rewrite for accuracy and clarity * Update links to removed 'tree format' header * Ledger Structure: Update diagrams * Re-gen CSS for ledger structure changes * Ledger structure: edits per review * IA.v3: fix broken NFT links introduced by rebase * Desktop Wallet (py): update little stuff * Update some capacity/storage details * contribute doc nav update * fix image link in create diagram page * IAv3: Fix 'Ledgers' blurb * Update full history requirements with details from community members * add reviewer suggestions * Edits per @trippled review * Apply suggestions from peer review Co-authored-by: oeggert <117319296+oeggert@users.noreply.github.com> * FH: reword file size limit note per review * Update software ecosystem * updates per review * Minor tweaks to graphics * fixTypos * Update content/concepts/introduction/software-ecosystem.md Co-authored-by: Amarantha Kulkarni <amarantha-k@users.noreply.github.com> * Update content/concepts/introduction/software-ecosystem.md Co-authored-by: Amarantha Kulkarni <amarantha-k@users.noreply.github.com> * [JA] update AccountDelete cost * custom transactors doc * add doc to dactyl config * [JA] fix NonFungibleTokensV1_1 amendment status * [JA] update NFTokenOffer page * Remove old, unused XRP article (#2039) * add reviewer suggestions * Add tooling to check for file/nav consistency - From the repo top, run tool/check_file_consistency.py to look for Markdown files that exist in the "content/" directory but aren't used in the documentation. - New "enforce_filenames" filter prints a warning to console when building, if a file's path and filename don't match expectations based on its place in the nav and top heading. * File consistency checker: correctly handle filenames starting in _ * Remove unused old 'get started' and associated code * Create Resources section & reorg some files - Rename some files/folders based on their place in the nav - Move a bunch of non-documentation stuff, and docs on contributing code and/or docs to the new "Resources" section. - Known issue: nav spills into a second row on page widths between 993px-1110px. To be fixed in a later CSS update, maybe along with making the Resources dropdown multi-column. * Fix #2078 code tab bug CSS not built yet, to reduce merge conflicts. Won't have any effect until that happens. * fix Transaction JSON * [JA] translate contributing contents * fix contributing-to-documentation parent * fix contribute-code blurb * Top nav: add cols for Resources, fix broken links * CSS: fix top nav overflows * Fix broken link from redirect not in JA target * Top nav: add Infra to article types * Update contrib info & rename intro file * [ja] Update link to suggested first page to translate * [ja] fix contribute docs organization * Run private network with docker tutorial (#2065) * [NO-ISSUE] Run private network with docker tutorial Adds a tutorial page in the Infrastructure section on how to run a private XRPL network with Docker. Please let me know if you think this is a useful page to include for developers, whether the steps are clear or not, and if you have suggestions on what can be added to it. * Add minor link fixes and Japanese target * Apply suggestions from code review Co-authored-by: Amarantha Kulkarni <amarantha-k@users.noreply.github.com> * Add link to ripple-docker-testnet setup scripts in See Also section * Update repo URL --------- Co-authored-by: Amarantha Kulkarni <amarantha-k@users.noreply.github.com> * add intro gfx (#2036) * add intro gfx * Move graphic up * Update some graphics with their revised versions * Add updated version of the custodial vs non-custodial graphic --------- Co-authored-by: Amarantha Kulkarni <amarantha-k@users.noreply.github.com> Co-authored-by: Amarantha Kulkarni <akulkarni@ripple.com> * Update to reflect current UNL publishers * [ja] update contributing Co-authored-by: tequ <git@tequ.dev> * Incorporate feedback on "What is XRP" page. (#2099) * Add trademark info for XRP * Revert section to previous state * Fix broken link (#2101) --------- Co-authored-by: Oliver Eggert <oeggert@ripple.com> Co-authored-by: ddawson <dennis.s.dawson@gmail.com> Co-authored-by: Maria Shodunke <mshodunke@ripple.com> Co-authored-by: tequ <git@tequ.dev> Co-authored-by: oeggert <117319296+oeggert@users.noreply.github.com> Co-authored-by: Amarantha Kulkarni <amarantha-k@users.noreply.github.com> Co-authored-by: develoQ <develoQ.jp@gmail.com> Co-authored-by: Maria Shodunke <maria-robobug@users.noreply.github.com> Co-authored-by: Amarantha Kulkarni <akulkarni@ripple.com>
650 lines
24 KiB
Markdown
650 lines
24 KiB
Markdown
---
|
|
html: py-mint-and-burn-nfts.html
|
|
parent: send-payments-using-python.html
|
|
blurb: Mint and burn NFTs.
|
|
labels:
|
|
- Quickstart
|
|
- Tokens
|
|
- Non-fungible tokens, NFTs
|
|
---
|
|
|
|
# Mint and Burn NFTs Using Python
|
|
|
|
This example shows how to:
|
|
|
|
1. Mint new Non-fungible Tokens (NFTs).
|
|
2. Get a list of existing NFTs.
|
|
3. Delete (Burn) an NFT.
|
|
|
|
[](img/quickstart-py10.png)
|
|
|
|
# Usage
|
|
|
|
You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-portal/tree/master/content/_code-samples/quickstart/js/quickstart.zip){.github-code-download} archive to try the sample in your own browser.
|
|
|
|
## Get Accounts
|
|
|
|
1. Open and run `lesson3-mint-token.py`.
|
|
2. Get test accounts.
|
|
1. If you have existing Testnet account seeds:
|
|
1. Paste the standby account seed in the **Standby Seed** field.
|
|
2. Click **Get Standby Account**.
|
|
3. Paste the operational account seed in the **Operational Seed** field.
|
|
4. Click **Get Operational Account**.
|
|
2. If you do not have existing Testnet accounts:
|
|
1. Click **Get New Standby Account**.
|
|
2. Click **Get New Operational Account**.
|
|
3. Click **Get Standby Account Info**.
|
|
4. Click **Get Op Account Info**.
|
|
|
|
[](img/quickstart-py11.png)
|
|
|
|
## Mint an NFT
|
|
|
|
To mint a non-fungible token object:
|
|
|
|
1. Set the **Flags** field. For testing purposes, we recommend setting the value to _8_. This sets the _tsTransferable_ flag, meaning that the NFT can be transferred to another account. Otherwise, the NFT can only be transferred back to the issuing account. See [NFToken Mint](https://xrpl.org/nftokenmint.html#:~:text=Example%20NFTokenMint%20JSON-,NFTokenMint%20Fields,-NFTokenMint%20Flags) for information about all of the available flags for minting NFTs.
|
|
2. Enter the **NFT URI**. This is a URI that points to the data or metadata associated with the NFT. You can use the sample URI provided if you do not have one of your own.
|
|
3. Enter the **Transfer Fee**, a percentage of the proceeds from future sales of the NFT that will be returned to the original creator. This is a value of 0-50000 inclusive, allowing transfer rates between 0.000% and 50.000% in increments of 0.001%. If you do not set the **Flags** field to allow the NFT to be transferrable, set this field to 0.
|
|
4. Optionally a **Taxon** value as an integer. If you choose not to use a taxon, enter _0_.
|
|
4. Click **Mint NFT**.
|
|
|
|
[](img/quickstart-py12.png)
|
|
|
|
|
|
## Get Tokens
|
|
|
|
Click **Get NFTs** to get a list of NFTs owned by the account.
|
|
|
|
[](img/quickstart-py13.png)
|
|
|
|
## Burn a Token
|
|
|
|
The current owner of an NFT can always destroy (or _burn_) an NFT.
|
|
|
|
To permanently destroy an NFT:
|
|
|
|
1. Enter the **Token ID**.
|
|
2. Click **Burn NFT**.
|
|
|
|
[](img/quickstart-py14.png)
|
|
|
|
# Code Walkthrough
|
|
|
|
You can download the [Quickstart Samples](https://github.com/XRPLF/xrpl-dev-portal/tree/master/content/_code-samples/quickstart/js/quickstart.zip){.github-code-download} archive to examine the code samples.
|
|
|
|
## mod3.py
|
|
|
|
This module contains the new methods `mint_token`, `get_tokens`, and `burn_token`.
|
|
|
|
Import dependencies and set global variable.
|
|
|
|
```python
|
|
import xrpl
|
|
import json
|
|
from xrpl.clients import JsonRpcClient
|
|
from xrpl.wallet import Wallet
|
|
from xrpl.models.requests import AccountNFTs
|
|
|
|
|
|
testnet_url = "https://s.altnet.rippletest.net:51234"
|
|
```
|
|
|
|
## mintToken
|
|
|
|
Pass the arguments account seed, NFT URI, transaction flags, the transfer fee, and optional taxon.
|
|
|
|
```python
|
|
def mint_token(seed, uri, flags, transfer_fee, taxon):
|
|
```
|
|
|
|
Get the account wallet and a client instance.
|
|
|
|
```python
|
|
mint_wallet=Wallet(seed, sequence=16237283)
|
|
client=JsonRpcClient(testnet_url)
|
|
```
|
|
|
|
Define the mint transaction. Note that the NFT URI must be converted to a hex string.
|
|
|
|
```python
|
|
mint_tx=xrpl.models.transactions.NFTokenMint(
|
|
account=mint_wallet.classic_address,
|
|
uri=xrpl.utils.str_to_hex(uri),
|
|
flags=int(flags),
|
|
transfer_fee=int(transfer_fee),
|
|
nftoken_taxon=int(taxon)
|
|
)
|
|
```
|
|
|
|
Sign and fill the transaction.
|
|
|
|
```python
|
|
signed_tx = xrpl.transaction.safe_sign_and_autofill_transaction(
|
|
mint_tx, mint_wallet, client)
|
|
```
|
|
|
|
Submit the transaction and return results.
|
|
|
|
```python
|
|
reply=""
|
|
try:
|
|
response=xrpl.transaction.send_reliable_submission(signed_tx,client)
|
|
reply=response.result
|
|
except xrpl.transaction.XRPLReliableSubmissionException as e:
|
|
reply=f"Submit failed: {e}"
|
|
return reply
|
|
```
|
|
|
|
## getTokens
|
|
|
|
```python
|
|
def get_tokens(account):
|
|
"""get_tokens"""
|
|
```
|
|
|
|
Instantiate a client.
|
|
|
|
```python
|
|
client=JsonRpcClient(testnet_url)
|
|
```
|
|
|
|
Prepare the `AccountNFTs` request.
|
|
|
|
```python
|
|
acct_nfts=AccountNFTs(
|
|
account=account
|
|
)
|
|
```
|
|
|
|
Send the request and return the result.
|
|
|
|
```python
|
|
response=client.request(acct_nfts)
|
|
return response.result
|
|
```
|
|
|
|
## burn_token
|
|
|
|
Pass the owner's seed value and the NFT ID.
|
|
|
|
```python
|
|
def burn_token(seed, nftoken_id):
|
|
"""burn_token"""
|
|
```
|
|
|
|
Get the owner wallet and client instance.
|
|
|
|
```python
|
|
owner_wallet=Wallet(seed, sequence=16237283)
|
|
client=JsonRpcClient(testnet_url)
|
|
```
|
|
|
|
Define the NFTokenBurn transaction.
|
|
|
|
```python
|
|
burn_tx=xrpl.models.transactions.NFTokenBurn(
|
|
account=owner_wallet.classic_address,
|
|
nftoken_id=nftoken_id
|
|
)
|
|
```
|
|
|
|
Sign and fill the transaction.
|
|
|
|
```python
|
|
signed_tx=xrpl.transaction.safe_sign_and_autofill_transaction(
|
|
burn_tx, owner_wallet, client)
|
|
```
|
|
|
|
Submit the transaction and return results.
|
|
|
|
```python
|
|
reply=""
|
|
try:
|
|
response=xrpl.transaction.send_reliable_submission(signed_tx,client)
|
|
reply=response.result
|
|
except xrpl.transaction.XRPLReliableSubmissionException as e:
|
|
reply=f"Submit failed: {e}"
|
|
return reply
|
|
```
|
|
|
|
|
|
## lesson3-mint-token.py
|
|
<!-- SPELLING_IGNORE: lesson3 -->
|
|
|
|
This module builds on `lesson2-create-trustline-send-currency.py`. Changes are noted below.
|
|
|
|
```python
|
|
import tkinter as tk
|
|
import xrpl
|
|
import json
|
|
import tkinter as tk
|
|
import xrpl
|
|
import json
|
|
|
|
from mod1 import get_account, get_account_info, send_xrp
|
|
from mod2 import (
|
|
create_trust_line,
|
|
send_currency,
|
|
get_balance,
|
|
configure_account,
|
|
)
|
|
```
|
|
|
|
Import methods from `mod3.py`.
|
|
|
|
```python
|
|
from mod3 import (
|
|
mint_token,
|
|
get_tokens,
|
|
burn_token,
|
|
)
|
|
|
|
#############################################
|
|
## Handlers #################################
|
|
#############################################
|
|
```
|
|
|
|
Module 3 Handlers
|
|
|
|
```python
|
|
def standby_mint_token():
|
|
results = mint_token(
|
|
ent_standby_seed.get(),
|
|
ent_standby_uri.get(),
|
|
ent_standby_flags.get(),
|
|
ent_standby_transfer_fee.get(),
|
|
ent_standby_taxon.get()
|
|
)
|
|
text_standby_results.delete("1.0", tk.END)
|
|
text_standby_results.insert("1.0", json.dumps(results, indent=4))
|
|
|
|
|
|
def standby_get_tokens():
|
|
results = get_tokens(ent_standby_account.get())
|
|
text_standby_results.delete("1.0", tk.END)
|
|
text_standby_results.insert("1.0", json.dumps(results, indent=4))
|
|
|
|
|
|
def standby_burn_token():
|
|
results = burn_token(
|
|
ent_standby_seed.get(),
|
|
ent_standby_nft_id.get()
|
|
)
|
|
text_standby_results.delete("1.0", tk.END)
|
|
text_standby_results.insert("1.0", json.dumps(results, indent=4))
|
|
|
|
|
|
def operational_mint_token():
|
|
results = mint_token(
|
|
ent_operational_seed.get(),
|
|
ent_operational_uri.get(),
|
|
ent_operational_flags.get(),
|
|
ent_operational_transfer_fee.get(),
|
|
ent_operational_taxon.get()
|
|
)
|
|
text_operational_results.delete("1.0", tk.END)
|
|
text_operational_results.insert("1.0", json.dumps(results, indent=4))
|
|
|
|
|
|
def operational_get_tokens():
|
|
results = get_tokens(ent_operational_account.get())
|
|
text_operational_results.delete("1.0", tk.END)
|
|
text_operational_results.insert("1.0", json.dumps(results, indent=4))
|
|
|
|
|
|
def operational_burn_token():
|
|
results = burn_token(
|
|
ent_operational_seed.get(),
|
|
ent_operational_nft_id.get()
|
|
)
|
|
text_operational_results.delete("1.0", tk.END)
|
|
text_operational_results.insert("1.0", json.dumps(results, indent=4))
|
|
|
|
|
|
# Module 2 Handlers
|
|
|
|
def standby_create_trust_line():
|
|
results = create_trust_line(ent_standby_seed.get(),
|
|
ent_standby_destination.get(),
|
|
ent_standby_currency.get(),
|
|
ent_standby_amount.get())
|
|
text_standby_results.delete("1.0", tk.END)
|
|
text_standby_results.insert("1.0", json.dumps(results, indent=4))
|
|
|
|
|
|
def standby_send_currency():
|
|
results = send_currency(ent_standby_seed.get(),
|
|
ent_standby_destination.get(),
|
|
ent_standby_currency.get(),
|
|
ent_standby_amount.get())
|
|
text_standby_results.delete("1.0", tk.END)
|
|
text_standby_results.insert("1.0", json.dumps(results, indent=4))
|
|
|
|
|
|
def standby_configure_account():
|
|
results = configure_account(
|
|
ent_standby_seed.get(),
|
|
standbyRippling)
|
|
text_standby_results.delete("1.0", tk.END)
|
|
text_standby_results.insert("1.0", json.dumps(results, indent=4))
|
|
|
|
|
|
def operational_create_trust_line():
|
|
results = create_trust_line(ent_operational_seed.get(),
|
|
ent_operational_destination.get(),
|
|
ent_operational_currency.get(),
|
|
ent_operational_amount.get())
|
|
text_operational_results.delete("1.0", tk.END)
|
|
text_operational_results.insert("1.0", json.dumps(results, indent=4))
|
|
|
|
|
|
def operational_send_currency():
|
|
results = send_currency(ent_operational_seed.get(),
|
|
ent_operational_destination.get(),
|
|
ent_operational_currency.get(),
|
|
ent_operational_amount.get())
|
|
text_operational_results.delete("1.0", tk.END)
|
|
text_operational_results.insert("1.0", json.dumps(results, indent=4))
|
|
|
|
|
|
def operational_configure_account():
|
|
results = configure_account(
|
|
ent_operational_seed.get(),
|
|
operationalRippling)
|
|
text_operational_results.delete("1.0", tk.END)
|
|
text_operational_results.insert("1.0", json.dumps(results, indent=4))
|
|
|
|
|
|
def get_balances():
|
|
results = get_balance(ent_operational_account.get(), ent_standby_account.get())
|
|
text_standby_results.delete("1.0", tk.END)
|
|
text_standby_results.insert("1.0", json.dumps(results, indent=4))
|
|
results = get_balance(ent_standby_account.get(), ent_operational_account.get())
|
|
text_operational_results.delete("1.0", tk.END)
|
|
text_operational_results.insert("1.0", json.dumps(results, indent=4))
|
|
|
|
# Module 1 Handlers
|
|
def get_standby_account():
|
|
new_wallet = get_account(ent_standby_seed.get())
|
|
ent_standby_account.delete(0, tk.END)
|
|
ent_standby_seed.delete(0, tk.END)
|
|
ent_standby_account.insert(0, new_wallet.classic_address)
|
|
ent_standby_seed.insert(0, new_wallet.seed)
|
|
|
|
|
|
def get_standby_account_info():
|
|
accountInfo = get_account_info(ent_standby_account.get())
|
|
ent_standby_balance.delete(0, tk.END)
|
|
ent_standby_balance.insert(0,accountInfo['Balance'])
|
|
text_standby_results.delete("1.0", tk.END)
|
|
text_standby_results.insert("1.0",json.dumps(accountInfo, indent=4))
|
|
|
|
|
|
def standby_send_xrp():
|
|
response = send_xrp(ent_standby_seed.get(),ent_standby_amount.get(),
|
|
ent_standby_destination.get())
|
|
text_standby_results.delete("1.0", tk.END)
|
|
text_standby_results.insert("1.0",json.dumps(response.result, indent=4))
|
|
get_standby_account_info()
|
|
get_operational_account_info()
|
|
|
|
|
|
def get_operational_account():
|
|
new_wallet = get_account(ent_operational_seed.get())
|
|
ent_operational_account.delete(0, tk.END)
|
|
ent_operational_account.insert(0, new_wallet.classic_address)
|
|
ent_operational_seed.delete(0, tk.END)
|
|
ent_operational_seed.insert(0, new_wallet.seed)
|
|
|
|
|
|
def get_operational_account_info():
|
|
accountInfo = get_account_info(ent_operational_account.get())
|
|
ent_operational_balance.delete(0, tk.END)
|
|
ent_operational_balance.insert(0,accountInfo['Balance'])
|
|
text_operational_results.delete("1.0", tk.END)
|
|
text_operational_results.insert("1.0",json.dumps(accountInfo, indent=4))
|
|
|
|
|
|
def operational_send_xrp():
|
|
response = send_xrp(ent_operational_seed.get(),ent_operational_amount.get(), ent_operational_destination.get())
|
|
text_operational_results.delete("1.0", tk.END)
|
|
text_operational_results.insert("1.0",json.dumps(response.result,indent=4))
|
|
get_standby_account_info()
|
|
get_operational_account_info()
|
|
```
|
|
|
|
Create a new window with the title "Quickstart Module 3."
|
|
|
|
```python
|
|
window = tk.Tk()
|
|
window.title("Quickstart Module 3")
|
|
|
|
standbyRippling = tk.BooleanVar()
|
|
operationalRippling = tk.BooleanVar()
|
|
|
|
# Form frame
|
|
frm_form = tk.Frame(relief=tk.SUNKEN, borderwidth=3)
|
|
frm_form.pack()
|
|
|
|
# Create the Label and Entry widgets for "Standby Account"
|
|
lbl_operational_seed = tk.Label(master=frm_form, text="Operational Seed")
|
|
ent_operational_seed = tk.Entry(master=frm_form, width=50)
|
|
lbl_operational_account = tk.Label(master=frm_form, text="Operational Account")
|
|
ent_operational_account = tk.Entry(master=frm_form, width=50)
|
|
lbl_operational_amount = tk.Label(master=frm_form, text="Amount")
|
|
ent_operational_amount = tk.Entry(master=frm_form, width=50)
|
|
lbl_operational_destination = tk.Label(master=frm_form, text="Destination")
|
|
ent_operational_destination = tk.Entry(master=frm_form, width=50)
|
|
lbl_operational_balance = tk.Label(master=frm_form, text="XRP Balance")
|
|
ent_operational_balance = tk.Entry(master=frm_form, width=50)
|
|
lbl_operational_currency = tk.Label(master=frm_form, text="Currency")
|
|
ent_operational_currency = tk.Entry(master=frm_form, width=50)
|
|
cb_standby_allow_rippling = tk.Checkbutton(master=frm_form, text="Allow Rippling", variable=standbyRippling, onvalue=True, offvalue=False)
|
|
```
|
|
|
|
Add **NFT URI**, **Flags**, **Transfer Fee**, **Taxon**, and **NFT ID** fields.
|
|
|
|
```python
|
|
lbl_standby_uri = tk.Label(master=frm_form, text="NFT URI")
|
|
ent_standby_uri = tk.Entry(master=frm_form, width=50)
|
|
lbl_standby_flags = tk.Label(master=frm_form, text="Flags")
|
|
ent_standby_flags = tk.Entry(master=frm_form, width=50)
|
|
lbl_standby_transfer_fee = tk.Label(master=frm_form, text="Transfer Fee")
|
|
ent_standby_transfer_fee = tk.Entry(master=frm_form, width="50")
|
|
lbl_standby_taxon = tk.Label(master=frm_form, text="Taxon")
|
|
ent_standby_taxon = tk.Entry(master=frm_form, width="50")
|
|
lbl_standby_nft_id = tk.Label(master=frm_form, text="NFT ID")
|
|
ent_standby_nft_id = tk.Entry(master=frm_form, width="50")
|
|
lbl_standby_results = tk.Label(master=frm_form,text='Results')
|
|
text_standby_results = tk.Text(master=frm_form, height = 20, width = 65)
|
|
|
|
# Place field in a grid.
|
|
lbl_standy_seed.grid(row=0, column=0, sticky="w")
|
|
ent_standby_seed.grid(row=0, column=1)
|
|
lbl_standby_account.grid(row=2, column=0, sticky="e")
|
|
ent_standby_account.grid(row=2, column=1)
|
|
lbl_standy_amount.grid(row=3, column=0, sticky="e")
|
|
ent_standby_amount.grid(row=3, column=1)
|
|
lbl_standby_destination.grid(row=4, column=0, sticky="e")
|
|
ent_standby_destination.grid(row=4, column=1)
|
|
lbl_standby_balance.grid(row=5, column=0, sticky="e")
|
|
ent_standby_balance.grid(row=5, column=1)
|
|
lbl_standby_currency.grid(row=6, column=0, sticky="e")
|
|
ent_standby_currency.grid(row=6, column=1)
|
|
cb_standby_allow_rippling.grid(row=7,column=1, sticky="w")
|
|
```
|
|
|
|
Place new UI elements in the grid.
|
|
|
|
```python
|
|
lbl_standby_uri.grid(row=8, column=0, sticky="e")
|
|
ent_standby_uri.grid(row=8, column=1, sticky="w")
|
|
lbl_standby_flags.grid(row=9, column=0, sticky="e")
|
|
ent_standby_flags.grid(row=9, column=1, sticky="w")
|
|
lbl_standby_transfer_fee.grid(row=10, column=0, sticky="e")
|
|
ent_standby_transfer_fee.grid(row=10, column=1, sticky="w")
|
|
lbl_standby_taxon.grid(row=11, column=0, sticky="e")
|
|
ent_standby_taxon.grid(row=11, column=1, sticky="w")
|
|
lbl_standby_nft_id.grid(row=12, column=0, sticky="e")
|
|
ent_standby_nft_id.grid(row=12, column=1, sticky="w")
|
|
lbl_standby_results.grid(row=13, column=0, sticky="ne")
|
|
text_standby_results.grid(row=13, column=1, sticky="nw")
|
|
cb_standby_allow_rippling.select()
|
|
|
|
###############################################
|
|
## Operational Account ########################
|
|
###############################################
|
|
|
|
# Create the Label and Entry widgets for "Operational Account"
|
|
lbl_operational_seed = tk.Label(master=frm_form, text="Operational Seed")
|
|
ent_operational_seed = tk.Entry(master=frm_form, width=50)
|
|
lbl_operational_account = tk.Label(master=frm_form, text="Operational Account")
|
|
ent_operational_account = tk.Entry(master=frm_form, width=50)
|
|
lbl_operational_amount = tk.Label(master=frm_form, text="Amount")
|
|
ent_operational_amount = tk.Entry(master=frm_form, width=50)
|
|
lbl_operational_destination = tk.Label(master=frm_form, text="Destination")
|
|
ent_operational_destination = tk.Entry(master=frm_form, width=50)
|
|
lbl_operational_balance = tk.Label(master=frm_form, text="XRP Balance")
|
|
ent_operational_balance = tk.Entry(master=frm_form, width=50)
|
|
lbl_operational_currency = tk.Label(master=frm_form, text="Currency")
|
|
ent_operational_currency = tk.Entry(master=frm_form, width=50)
|
|
cb_operational_allow_rippling = tk.Checkbutton(master=frm_form, text="Allow Rippling", variable=operationalRippling, onvalue=True, offvalue=False)
|
|
```
|
|
|
|
Add fields for **NFT URI**, **Flags**, **Transfer Fee**, **Taxon**, and **NFT ID**.
|
|
|
|
```python
|
|
lbl_operational_uri = tk.Label(master=frm_form, text="NFT URI")
|
|
ent_operational_uri = tk.Entry(master=frm_form, width=50)
|
|
lbl_operational_flags = tk.Label(master=frm_form, text="Flags")
|
|
ent_operational_flags = tk.Entry(master=frm_form, width=50)
|
|
lbl_operational_transfer_fee = tk.Label(master=frm_form, text="Transfer Fee")
|
|
ent_operational_transfer_fee = tk.Entry(master=frm_form, width="50")
|
|
lbl_operational_taxon = tk.Label(master=frm_form, text="Taxon")
|
|
ent_operational_taxon = tk.Entry(master=frm_form, width="50")
|
|
lbl_operational_nft_id = tk.Label(master=frm_form, text="NFT ID")
|
|
ent_operational_nft_id = tk.Entry(master=frm_form, width="50")
|
|
lbl_operational_results = tk.Label(master=frm_form,text='Results')
|
|
text_operational_results = tk.Text(master=frm_form, height = 20, width = 65)
|
|
|
|
#Place the widgets in a grid
|
|
lbl_operational_seed.grid(row=0, column=4, sticky="e")
|
|
ent_operational_seed.grid(row=0, column=5, sticky="w")
|
|
lbl_operational_account.grid(row=2,column=4, sticky="e")
|
|
ent_operational_account.grid(row=2,column=5, sticky="w")
|
|
lbl_operational_amount.grid(row=3, column=4, sticky="e")
|
|
ent_operational_amount.grid(row=3, column=5, sticky="w")
|
|
lbl_operational_destination.grid(row=4, column=4, sticky="e")
|
|
ent_operational_destination.grid(row=4, column=5, sticky="w")
|
|
lbl_operational_balance.grid(row=5, column=4, sticky="e")
|
|
ent_operational_balance.grid(row=5, column=5, sticky="w")
|
|
lbl_operational_currency.grid(row=6, column=4, sticky="e")
|
|
ent_operational_currency.grid(row=6, column=5)
|
|
cb_operational_allow_rippling.grid(row=7,column=5, sticky="w")
|
|
```
|
|
|
|
Place new UI elements in the grid.
|
|
|
|
```python
|
|
lbl_operational_uri.grid(row=8, column=4, sticky="e")
|
|
ent_operational_uri.grid(row=8, column=5, sticky="w")
|
|
lbl_operational_flags.grid(row=9, column=4, sticky="e")
|
|
ent_operational_flags.grid(row=9, column=5, sticky="w")
|
|
lbl_operational_transfer_fee.grid(row=10, column=4, sticky="e")
|
|
ent_operational_transfer_fee.grid(row=10, column=5, sticky="w")
|
|
lbl_operational_taxon.grid(row=11, column=4, sticky="e")
|
|
ent_operational_taxon.grid(row=11, column=5, sticky="w")
|
|
lbl_operational_nft_id.grid(row=12, column=4, sticky="e")
|
|
ent_operational_nft_id.grid(row=12, column=5, sticky="w")
|
|
lbl_operational_results.grid(row=13, column=4, sticky="ne")
|
|
text_operational_results.grid(row=13, column=5, sticky="nw")
|
|
|
|
cb_operational_allow_rippling.select()
|
|
|
|
#############################################
|
|
## Buttons ##################################
|
|
#############################################
|
|
|
|
# Create the Standby Account Buttons
|
|
btn_get_standby_account = tk.Button(master=frm_form, text="Get Standby Account",
|
|
command = get_standby_account)
|
|
btn_get_standby_account.grid(row=0, column=2, sticky = "nsew")
|
|
btn_get_standby_account_info = tk.Button(master=frm_form,
|
|
text="Get Standby Account Info",
|
|
command = get_standby_account_info)
|
|
btn_get_standby_account_info.grid(row=1, column=2, sticky = "nsew")
|
|
btn_standby_send_xrp = tk.Button(master=frm_form, text="Send XRP >",
|
|
command = standby_send_xrp)
|
|
btn_standby_send_xrp.grid(row=2, column = 2, sticky = "nsew")
|
|
btn_standby_create_trust_line = tk.Button(master=frm_form,
|
|
text="Create Trust Line",
|
|
command = standby_create_trust_line)
|
|
btn_standby_create_trust_line.grid(row=3, column=2, sticky = "nsew")
|
|
btn_standby_send_currency = tk.Button(master=frm_form, text="Send Currency >",
|
|
command = standby_send_currency)
|
|
btn_standby_send_currency.grid(row=4, column=2, sticky = "nsew")
|
|
btn_standby_send_currency = tk.Button(master=frm_form, text="Get Balances",
|
|
command = get_balances)
|
|
btn_standby_send_currency.grid(row=5, column=2, sticky = "nsew")
|
|
btn_standby_configure_account = tk.Button(master=frm_form,
|
|
text="Configure Account",
|
|
command = standby_configure_account)
|
|
```
|
|
|
|
Add buttons for **Mint NFT**, **Get NFTs**, and **Burn NFT**.
|
|
|
|
```python
|
|
btn_standby_mint_token = tk.Button(master=frm_form, text="Mint NFT",
|
|
command = standby_mint_token)
|
|
btn_standby_mint_token.grid(row=8, column=2, sticky="nsew")
|
|
btn_standby_get_tokens = tk.Button(master=frm_form, text="Get NFTs",
|
|
command = standby_get_tokens)
|
|
btn_standby_get_tokens.grid(row=9, column=2, sticky="nsew")
|
|
btn_standby_burn_token = tk.Button(master=frm_form, text="Burn NFT",
|
|
command = standby_burn_token)
|
|
btn_standby_burn_token.grid(row=10, column=2, sticky="nsew")
|
|
|
|
|
|
# Create the Operational Account Buttons
|
|
btn_get_operational_account = tk.Button(master=frm_form,
|
|
text="Get Operational Account",
|
|
command = get_operational_account)
|
|
btn_get_operational_account.grid(row=0, column=3, sticky = "nsew")
|
|
btn_get_op_account_info = tk.Button(master=frm_form, text="Get Op Account Info",
|
|
command = get_operational_account_info)
|
|
btn_get_op_account_info.grid(row=1, column=3, sticky = "nsew")
|
|
btn_op_send_xrp = tk.Button(master=frm_form, text="< Send XRP",
|
|
command = operational_send_xrp)
|
|
btn_op_send_xrp.grid(row=2, column = 3, sticky = "nsew")
|
|
btn_op_create_trust_line = tk.Button(master=frm_form, text="Create Trust Line",
|
|
command = operational_create_trust_line)
|
|
btn_op_create_trust_line.grid(row=3, column=3, sticky = "nsew")
|
|
btn_op_send_currency = tk.Button(master=frm_form, text="< Send Currency",
|
|
command = operational_send_currency)
|
|
btn_op_send_currency.grid(row=4, column=3, sticky = "nsew")
|
|
btn_op_get_balances = tk.Button(master=frm_form, text="Get Balances",
|
|
command = get_balances)
|
|
btn_op_get_balances.grid(row=5, column=3, sticky = "nsew")
|
|
btn_op_configure_account = tk.Button(master=frm_form, text="Configure Account",
|
|
command = operational_configure_account)
|
|
btn_op_configure_account.grid(row=7,column=4, sticky = "nsew")
|
|
```
|
|
Add buttons for **Mint NFT**, **Get NFTs**, and **Burn NFT**.
|
|
|
|
```python
|
|
btn_op_mint_token = tk.Button(master=frm_form, text="Mint NFT",
|
|
command = operational_mint_token)
|
|
btn_op_mint_token.grid(row=8, column=3, sticky="nsew")
|
|
btn_op_get_tokens = tk.Button(master=frm_form, text="Get NFTs",
|
|
command = operational_get_tokens)
|
|
btn_op_get_tokens.grid(row=9, column=3, sticky="nsew")
|
|
btn_op_burn_token = tk.Button(master=frm_form, text="Burn NFT",
|
|
command = operational_burn_token)
|
|
btn_op_burn_token.grid(row=10, column=3, sticky="nsew")
|
|
|
|
# Start the application
|
|
window.mainloop()
|
|
```
|
|
|