mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-08 06:45:49 +00:00
Compare commits
5 Commits
@transia/x
...
gw/add-nft
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a4519a3a3d | ||
|
|
f6f8fef006 | ||
|
|
c7fdf74771 | ||
|
|
a9730af656 | ||
|
|
34ecd570b9 |
68
src/models/methods/accountNFTs.ts
Normal file
68
src/models/methods/accountNFTs.ts
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
import { BaseRequest, BaseResponse } from './baseMethod'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The `account_nfts` method retrieves all of the NFTs currently owned by the
|
||||||
|
* specified account.
|
||||||
|
*
|
||||||
|
* @category Requests
|
||||||
|
*/
|
||||||
|
export interface AccountNFTsRequest extends BaseRequest {
|
||||||
|
command: 'account_nfts'
|
||||||
|
/**
|
||||||
|
* The unique identifier of an account, typically the account's address. The
|
||||||
|
* request returns NFTs owned by this account.
|
||||||
|
*/
|
||||||
|
account: string
|
||||||
|
/**
|
||||||
|
* Limit the number of NFTokens to retrieve.
|
||||||
|
*/
|
||||||
|
limit?: number
|
||||||
|
/**
|
||||||
|
* Value from a previous paginated response. Resume retrieving data where
|
||||||
|
* that response left off.
|
||||||
|
*/
|
||||||
|
marker?: unknown
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* One NFToken that might be returned from an {@link AccountNFTsRequest}.
|
||||||
|
*
|
||||||
|
* @category Responses
|
||||||
|
*/
|
||||||
|
interface AccountNFToken {
|
||||||
|
// TODO Need to check all this
|
||||||
|
Flags: number
|
||||||
|
Issuer: string
|
||||||
|
TokenID: string
|
||||||
|
TokenTaxons: number
|
||||||
|
nft_serial: number
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Response expected from an {@link AccountNFTsRequest}.
|
||||||
|
*
|
||||||
|
* @category Responses
|
||||||
|
*/
|
||||||
|
export interface AccountNFTsResponse extends BaseResponse {
|
||||||
|
result: {
|
||||||
|
/**
|
||||||
|
* A list of NFTs owned by the specified account.
|
||||||
|
*/
|
||||||
|
account_nfts: AccountNFToken[]
|
||||||
|
/**
|
||||||
|
* The ledger index of the current open ledger, which was used when
|
||||||
|
* retrieving this information.
|
||||||
|
*/
|
||||||
|
ledger_current_index: number
|
||||||
|
/** If true, this data comes from a validated ledger. */
|
||||||
|
validated: boolean
|
||||||
|
/**
|
||||||
|
* Server-defined value indicating the response is paginated. Pass this to
|
||||||
|
* the next call to resume where this call left off. Omitted when there are
|
||||||
|
* No additional pages after this one.
|
||||||
|
*/
|
||||||
|
marker?: unknown
|
||||||
|
/** The limit that was used to fulfill this request. */
|
||||||
|
limit?: number
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,6 +8,7 @@ import {
|
|||||||
} from './accountCurrencies'
|
} from './accountCurrencies'
|
||||||
import { AccountInfoRequest, AccountInfoResponse } from './accountInfo'
|
import { AccountInfoRequest, AccountInfoResponse } from './accountInfo'
|
||||||
import { AccountLinesRequest, AccountLinesResponse } from './accountLines'
|
import { AccountLinesRequest, AccountLinesResponse } from './accountLines'
|
||||||
|
import { AccountNFTsRequest, AccountNFTsResponse } from './accountNFTs'
|
||||||
import { AccountObjectsRequest, AccountObjectsResponse } from './accountObjects'
|
import { AccountObjectsRequest, AccountObjectsResponse } from './accountObjects'
|
||||||
import { AccountOffersRequest, AccountOffersResponse } from './accountOffers'
|
import { AccountOffersRequest, AccountOffersResponse } from './accountOffers'
|
||||||
import { AccountTxRequest, AccountTxResponse } from './accountTx'
|
import { AccountTxRequest, AccountTxResponse } from './accountTx'
|
||||||
@@ -29,6 +30,8 @@ import { LedgerCurrentRequest, LedgerCurrentResponse } from './ledgerCurrent'
|
|||||||
import { LedgerDataRequest, LedgerDataResponse } from './ledgerData'
|
import { LedgerDataRequest, LedgerDataResponse } from './ledgerData'
|
||||||
import { LedgerEntryRequest, LedgerEntryResponse } from './ledgerEntry'
|
import { LedgerEntryRequest, LedgerEntryResponse } from './ledgerEntry'
|
||||||
import { ManifestRequest, ManifestResponse } from './manifest'
|
import { ManifestRequest, ManifestResponse } from './manifest'
|
||||||
|
import { NFTBuyOffersRequest, NFTBuyOffersResponse } from './nftBuyOffers'
|
||||||
|
import { NFTSellOffersRequest, NFTSellOffersResponse } from './nftSellOffers'
|
||||||
import { NoRippleCheckRequest, NoRippleCheckResponse } from './norippleCheck'
|
import { NoRippleCheckRequest, NoRippleCheckResponse } from './norippleCheck'
|
||||||
import { PathFindRequest, PathFindResponse } from './pathFind'
|
import { PathFindRequest, PathFindResponse } from './pathFind'
|
||||||
import { PingRequest, PingResponse } from './ping'
|
import { PingRequest, PingResponse } from './ping'
|
||||||
@@ -64,10 +67,12 @@ import { UnsubscribeRequest, UnsubscribeResponse } from './unsubscribe'
|
|||||||
* @category Requests
|
* @category Requests
|
||||||
*/
|
*/
|
||||||
type Request =
|
type Request =
|
||||||
|
// account methods
|
||||||
| AccountChannelsRequest
|
| AccountChannelsRequest
|
||||||
| AccountCurrenciesRequest
|
| AccountCurrenciesRequest
|
||||||
| AccountInfoRequest
|
| AccountInfoRequest
|
||||||
| AccountLinesRequest
|
| AccountLinesRequest
|
||||||
|
| AccountNFTsRequest
|
||||||
| AccountObjectsRequest
|
| AccountObjectsRequest
|
||||||
| AccountOffersRequest
|
| AccountOffersRequest
|
||||||
| AccountTxRequest
|
| AccountTxRequest
|
||||||
@@ -102,15 +107,20 @@ type Request =
|
|||||||
// utility methods
|
// utility methods
|
||||||
| PingRequest
|
| PingRequest
|
||||||
| RandomRequest
|
| RandomRequest
|
||||||
|
// NFT methods
|
||||||
|
| NFTBuyOffersRequest
|
||||||
|
| NFTSellOffersRequest
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @category Responses
|
* @category Responses
|
||||||
*/
|
*/
|
||||||
type Response =
|
type Response =
|
||||||
|
// account methods
|
||||||
| AccountChannelsResponse
|
| AccountChannelsResponse
|
||||||
| AccountCurrenciesResponse
|
| AccountCurrenciesResponse
|
||||||
| AccountInfoResponse
|
| AccountInfoResponse
|
||||||
| AccountLinesResponse
|
| AccountLinesResponse
|
||||||
|
| AccountNFTsResponse
|
||||||
| AccountObjectsResponse
|
| AccountObjectsResponse
|
||||||
| AccountOffersResponse
|
| AccountOffersResponse
|
||||||
| AccountTxResponse
|
| AccountTxResponse
|
||||||
@@ -145,6 +155,9 @@ type Response =
|
|||||||
// utility methods
|
// utility methods
|
||||||
| PingResponse
|
| PingResponse
|
||||||
| RandomResponse
|
| RandomResponse
|
||||||
|
// NFT methods
|
||||||
|
| NFTBuyOffersResponse
|
||||||
|
| NFTSellOffersResponse
|
||||||
|
|
||||||
export {
|
export {
|
||||||
Request,
|
Request,
|
||||||
@@ -158,6 +171,8 @@ export {
|
|||||||
AccountInfoResponse,
|
AccountInfoResponse,
|
||||||
AccountLinesRequest,
|
AccountLinesRequest,
|
||||||
AccountLinesResponse,
|
AccountLinesResponse,
|
||||||
|
AccountNFTsRequest,
|
||||||
|
AccountNFTsResponse,
|
||||||
AccountObjectsRequest,
|
AccountObjectsRequest,
|
||||||
AccountObjectsResponse,
|
AccountObjectsResponse,
|
||||||
AccountOffersRequest,
|
AccountOffersRequest,
|
||||||
@@ -228,4 +243,9 @@ export {
|
|||||||
RandomRequest,
|
RandomRequest,
|
||||||
RandomResponse,
|
RandomResponse,
|
||||||
ErrorResponse,
|
ErrorResponse,
|
||||||
|
// NFT methods
|
||||||
|
NFTBuyOffersRequest,
|
||||||
|
NFTBuyOffersResponse,
|
||||||
|
NFTSellOffersRequest,
|
||||||
|
NFTSellOffersResponse,
|
||||||
}
|
}
|
||||||
|
|||||||
50
src/models/methods/nftBuyOffers.ts
Normal file
50
src/models/methods/nftBuyOffers.ts
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
import { Amount } from '../common'
|
||||||
|
|
||||||
|
import { BaseRequest, BaseResponse } from './baseMethod'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The `nft_buy_offers` method retrieves all of buy offers for the specified
|
||||||
|
* NFToken.
|
||||||
|
*
|
||||||
|
* @category Requests
|
||||||
|
*/
|
||||||
|
export interface NFTBuyOffersRequest extends BaseRequest {
|
||||||
|
command: 'nft_buy_offers'
|
||||||
|
/**
|
||||||
|
* The unique identifier of an NFToken. The request returns buy offers for this NFToken.
|
||||||
|
*/
|
||||||
|
tokenid: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* One buy offer that might be returned from an {@link NFTBuyOffersRequest}.
|
||||||
|
*
|
||||||
|
* @category Responses
|
||||||
|
*/
|
||||||
|
interface NFTBuyOffer {
|
||||||
|
// TODO Need to check all this
|
||||||
|
amount: Amount
|
||||||
|
destination: string
|
||||||
|
expiration: number
|
||||||
|
flags: number
|
||||||
|
index: string
|
||||||
|
owner: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Response expected from an {@link NFTBuyOffersRequest}.
|
||||||
|
*
|
||||||
|
* @category Responses
|
||||||
|
*/
|
||||||
|
export interface NFTBuyOffersResponse extends BaseResponse {
|
||||||
|
result: {
|
||||||
|
/**
|
||||||
|
* A list of buy offers for the specified NFToken.
|
||||||
|
*/
|
||||||
|
offers: NFTBuyOffer[]
|
||||||
|
/**
|
||||||
|
* The token ID of the NFToken to which these offers pertain.
|
||||||
|
*/
|
||||||
|
tokenid: string
|
||||||
|
}
|
||||||
|
}
|
||||||
50
src/models/methods/nftSellOffers.ts
Normal file
50
src/models/methods/nftSellOffers.ts
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
import { Amount } from '../common'
|
||||||
|
|
||||||
|
import { BaseRequest, BaseResponse } from './baseMethod'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The `nft_sell_offers` method retrieves all of sell offers for the specified
|
||||||
|
* NFToken.
|
||||||
|
*
|
||||||
|
* @category Requests
|
||||||
|
*/
|
||||||
|
export interface NFTSellOffersRequest extends BaseRequest {
|
||||||
|
command: 'nft_sell_offers'
|
||||||
|
/**
|
||||||
|
* The unique identifier of an NFToken. The request returns sell offers for this NFToken.
|
||||||
|
*/
|
||||||
|
tokenid: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* One sell offer that might be returned from an {@link NFTSellOffersRequest}.
|
||||||
|
*
|
||||||
|
* @category Responses
|
||||||
|
*/
|
||||||
|
interface NFTSellOffer {
|
||||||
|
// TODO Need to check all this
|
||||||
|
amount: Amount
|
||||||
|
destination: string
|
||||||
|
expiration: number
|
||||||
|
flags: number
|
||||||
|
index: string
|
||||||
|
owner: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Response expected from an {@link NFTSellOffersRequest}.
|
||||||
|
*
|
||||||
|
* @category Responses
|
||||||
|
*/
|
||||||
|
export interface NFTSellOffersResponse extends BaseResponse {
|
||||||
|
result: {
|
||||||
|
/**
|
||||||
|
* A list of sell offers for the specified NFToken.
|
||||||
|
*/
|
||||||
|
offers: NFTSellOffer[]
|
||||||
|
/**
|
||||||
|
* The token ID of the NFToken to which these offers pertain.
|
||||||
|
*/
|
||||||
|
tokenid: string
|
||||||
|
}
|
||||||
|
}
|
||||||
80
src/models/transactions/NFTokenAcceptOffer.ts
Normal file
80
src/models/transactions/NFTokenAcceptOffer.ts
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
import { ValidationError } from '../../errors'
|
||||||
|
import { Amount } from '../common'
|
||||||
|
|
||||||
|
import { BaseTransaction, validateBaseTransaction, isAmount } from './common'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The NFTokenAcceptOffer transaction creates an NFToken object and adds it to the
|
||||||
|
* relevant NFTokenPage object of the minter. If the transaction is
|
||||||
|
* successful, the newly minted token will be owned by the minter account
|
||||||
|
* specified by the transaction.
|
||||||
|
*/
|
||||||
|
export interface NFTokenAcceptOffer extends BaseTransaction {
|
||||||
|
TransactionType: 'NFTokenAcceptOffer'
|
||||||
|
/**
|
||||||
|
* Identifies the NFTokenOffer that offers to sell the NFToken.
|
||||||
|
*
|
||||||
|
* In direct mode this field is optional, but either SellOffer or
|
||||||
|
* BuyOffer must be specified. In brokered mode, both SellOffer
|
||||||
|
* and BuyOffer MUST be specified.
|
||||||
|
*/
|
||||||
|
SellOffer?: string
|
||||||
|
/**
|
||||||
|
* Identifies the NFTokenOffer that offers to buy the NFToken.
|
||||||
|
*
|
||||||
|
* In direct mode this field is optional, but either SellOffer or
|
||||||
|
* BuyOffer must be specified. In brokered mode, both SellOffer
|
||||||
|
* and BuyOffer MUST be specified.
|
||||||
|
*/
|
||||||
|
BuyOffer?: string
|
||||||
|
/**
|
||||||
|
* This field is only valid in brokered mode and specifies the
|
||||||
|
* amount that the broker will keep as part of their fee for
|
||||||
|
* bringing the two offers together; the remaining amount will
|
||||||
|
* be sent to the seller of the NFToken being bought. If
|
||||||
|
* specified, the fee must be such that, prior to accounting
|
||||||
|
* for the transfer fee charged by the issuer, the amount that
|
||||||
|
* the seller would receive is at least as much as the amount
|
||||||
|
* indicated in the sell offer.
|
||||||
|
*
|
||||||
|
* This functionality is intended to allow the owner of an
|
||||||
|
* NFToken to offer their token for sale to a third party
|
||||||
|
* broker, who may then attempt to sell the NFToken on for a
|
||||||
|
* larger amount, without the broker having to own the NFToken
|
||||||
|
* or custody funds.
|
||||||
|
*
|
||||||
|
* If both offers are for the same asset, it is possible that
|
||||||
|
* the order in which funds are transferred might cause a
|
||||||
|
* transaction that would succeed to fail due to an apparent
|
||||||
|
* lack of funds. To ensure deterministic transaction execution
|
||||||
|
* and maximimize the chances of successful execution, this
|
||||||
|
* proposal requires that the account attempting to buy the
|
||||||
|
* NFToken is debited first and that funds due to the broker
|
||||||
|
* are credited before crediting the seller.
|
||||||
|
*
|
||||||
|
* Note: in brokered mode, The offers referenced by BuyOffer
|
||||||
|
* and SellOffer must both specify the same TokenID; that is,
|
||||||
|
* both must be for the same NFToken.
|
||||||
|
*/
|
||||||
|
BrokerFee?: Amount
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify the form and type of an NFTokenAcceptOffer at runtime.
|
||||||
|
*
|
||||||
|
* @param tx - An NFTokenAcceptOffer Transaction.
|
||||||
|
* @throws When the NFTokenAcceptOffer is Malformed.
|
||||||
|
*/
|
||||||
|
export function validateNFTokenAcceptOffer(tx: Record<string, unknown>): void {
|
||||||
|
validateBaseTransaction(tx)
|
||||||
|
|
||||||
|
if (
|
||||||
|
tx.BrokerFee != null &&
|
||||||
|
typeof tx.BrokerFee !== 'string' &&
|
||||||
|
!isAmount(tx.BrokerFee)
|
||||||
|
) {
|
||||||
|
throw new ValidationError('NFTokenAcceptOffer: invalid BrokerFee')
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO more validations
|
||||||
|
}
|
||||||
46
src/models/transactions/NFTokenBurn.ts
Normal file
46
src/models/transactions/NFTokenBurn.ts
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import { ValidationError } from '../../errors'
|
||||||
|
|
||||||
|
import { BaseTransaction, validateBaseTransaction } from './common'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The NFTokenBurn transaction is used to remove an NFToken object from the
|
||||||
|
* NFTokenPage in which it is being held, effectively removing the token from
|
||||||
|
* the ledger ("burning" it).
|
||||||
|
*
|
||||||
|
* If this operation succeeds, the corresponding NFToken is removed. If this
|
||||||
|
* operation empties the NFTokenPage holding the NFToken or results in the
|
||||||
|
* consolidation, thus removing an NFTokenPage, the owner’s reserve requirement
|
||||||
|
* is reduced by one.
|
||||||
|
*/
|
||||||
|
export interface NFTokenBurn extends BaseTransaction {
|
||||||
|
TransactionType: 'NFTokenBurn'
|
||||||
|
/**
|
||||||
|
* Indicates the AccountID that submitted this transaction. The account MUST
|
||||||
|
* be either the present owner of the token or, if the lsfBurnable flag is set
|
||||||
|
* in the NFToken, either the issuer account or an account authorized by the
|
||||||
|
* issuer, i.e. MintAccount.
|
||||||
|
*/
|
||||||
|
Account: string
|
||||||
|
/**
|
||||||
|
* Identifies the NFToken object to be removed by the transaction.
|
||||||
|
*/
|
||||||
|
TokenID: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify the form and type of an NFTokenBurn at runtime.
|
||||||
|
*
|
||||||
|
* @param tx - An NFTokenBurn Transaction.
|
||||||
|
* @throws When the NFTokenBurn is Malformed.
|
||||||
|
*/
|
||||||
|
export function validateNFTokenBurn(tx: Record<string, unknown>): void {
|
||||||
|
validateBaseTransaction(tx)
|
||||||
|
|
||||||
|
if (tx.Account == null) {
|
||||||
|
throw new ValidationError('NFTokenBurn: missing field Account')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tx.TokenID == null) {
|
||||||
|
throw new ValidationError('NFTokenBurn: missing field TokenID')
|
||||||
|
}
|
||||||
|
}
|
||||||
38
src/models/transactions/NFTokenCancelOffer.ts
Normal file
38
src/models/transactions/NFTokenCancelOffer.ts
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
import { ValidationError } from '../../errors'
|
||||||
|
|
||||||
|
import { BaseTransaction, validateBaseTransaction } from './common'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The NFTokenCancelOffer transaction creates an NFToken object and adds it to the
|
||||||
|
* relevant NFTokenPage object of the minter. If the transaction is
|
||||||
|
* successful, the newly minted token will be owned by the minter account
|
||||||
|
* specified by the transaction.
|
||||||
|
*/
|
||||||
|
export interface NFTokenCancelOffer extends BaseTransaction {
|
||||||
|
TransactionType: 'NFTokenCancelOffer'
|
||||||
|
/**
|
||||||
|
* An array of TokenID objects, each identifying an
|
||||||
|
* NFTokenOffer object, which should be cancelled by this
|
||||||
|
* transaction.
|
||||||
|
*
|
||||||
|
* It is an error if an entry in this list points to an
|
||||||
|
* object that is not an NFTokenOffer object. It is not an
|
||||||
|
* error if an entry in this list points to an object that
|
||||||
|
* does not exist.
|
||||||
|
*/
|
||||||
|
TokenIDs: string[]
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify the form and type of an NFTokenCancelOffer at runtime.
|
||||||
|
*
|
||||||
|
* @param tx - An NFTokenCancelOffer Transaction.
|
||||||
|
* @throws When the NFTokenCancelOffer is Malformed.
|
||||||
|
*/
|
||||||
|
export function validateNFTokenCancelOffer(tx: Record<string, unknown>): void {
|
||||||
|
validateBaseTransaction(tx)
|
||||||
|
|
||||||
|
if (tx.TokenIDs == null || tx.TokenIDs.length < 1) {
|
||||||
|
throw new ValidationError('NFTokenCancelOffer: missing field TokenIDs')
|
||||||
|
}
|
||||||
|
}
|
||||||
116
src/models/transactions/NFTokenCreateOffer.ts
Normal file
116
src/models/transactions/NFTokenCreateOffer.ts
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
import { ValidationError } from '../../errors'
|
||||||
|
import { Amount } from '../common'
|
||||||
|
|
||||||
|
import {
|
||||||
|
BaseTransaction,
|
||||||
|
GlobalFlags,
|
||||||
|
validateBaseTransaction,
|
||||||
|
isAmount,
|
||||||
|
} from './common'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transaction Flags for an NFTokenCreateOffer Transaction.
|
||||||
|
*
|
||||||
|
* @category Transaction Flags
|
||||||
|
*/
|
||||||
|
export enum NFTokenCreateOfferFlags {
|
||||||
|
/**
|
||||||
|
* If set, indicates that the offer is a sell offer.
|
||||||
|
* Otherwise, it is a buy offer.
|
||||||
|
*/
|
||||||
|
tfSellToken = 0x00000001,
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map of flags to boolean values representing {@link NFTokenCreateOffer} transaction
|
||||||
|
* flags.
|
||||||
|
*
|
||||||
|
* @category Transaction Flags
|
||||||
|
*/
|
||||||
|
export interface NFTokenCreateOfferFlagsInterface extends GlobalFlags {
|
||||||
|
tfSellToken?: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The NFTokenCreateOffer transaction creates an NFToken object and adds it to the
|
||||||
|
* relevant NFTokenPage object of the minter. If the transaction is
|
||||||
|
* successful, the newly minted token will be owned by the minter account
|
||||||
|
* specified by the transaction.
|
||||||
|
*/
|
||||||
|
export interface NFTokenCreateOffer extends BaseTransaction {
|
||||||
|
TransactionType: 'NFTokenCreateOffer'
|
||||||
|
/**
|
||||||
|
* Indicates the AccountID of the account that initiated the
|
||||||
|
* transaction.
|
||||||
|
*/
|
||||||
|
Account: string
|
||||||
|
/**
|
||||||
|
* Identifies the TokenID of the NFToken object that the
|
||||||
|
* offer references.
|
||||||
|
*/
|
||||||
|
TokenID: string
|
||||||
|
/**
|
||||||
|
* Indicates the amount expected or offered for the Token.
|
||||||
|
*
|
||||||
|
* The amount must be non-zero, except where this is an
|
||||||
|
* offer is an offer to sell and the asset is XRP; then it
|
||||||
|
* is legal to specify an amount of zero, which means that
|
||||||
|
* the current owner of the token is giving it away, gratis,
|
||||||
|
* either to anyone at all, or to the account identified by
|
||||||
|
* the Destination field.
|
||||||
|
*/
|
||||||
|
Amount: Amount
|
||||||
|
/**
|
||||||
|
* Indicates the AccountID of the account that owns the
|
||||||
|
* corresponding NFToken.
|
||||||
|
*
|
||||||
|
* If the offer is to buy a token, this field must be present
|
||||||
|
* and it must be different than Account (since an offer to
|
||||||
|
* buy a token one already holds is meaningless).
|
||||||
|
*
|
||||||
|
* If the offer is to sell a token, this field must not be
|
||||||
|
* present, as the owner is, implicitly, the same as Account
|
||||||
|
* (since an offer to sell a token one doesn't already hold
|
||||||
|
* is meaningless).
|
||||||
|
*/
|
||||||
|
Owner?: string
|
||||||
|
/**
|
||||||
|
* Indicates the time after which the offer will no longer
|
||||||
|
* be valid. The value is the number of seconds since the
|
||||||
|
* Ripple Epoch.
|
||||||
|
*/
|
||||||
|
Expiration?: number
|
||||||
|
/**
|
||||||
|
* If present, indicates that this offer may only be
|
||||||
|
* accepted by the specified account. Attempts by other
|
||||||
|
* accounts to accept this offer MUST fail.
|
||||||
|
*/
|
||||||
|
Destination?: string
|
||||||
|
Flags?: number | NFTokenCreateOfferFlagsInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify the form and type of an NFTokenCreateOffer at runtime.
|
||||||
|
*
|
||||||
|
* @param tx - An NFTokenCreateOffer Transaction.
|
||||||
|
* @throws When the NFTokenCreateOffer is Malformed.
|
||||||
|
*/
|
||||||
|
export function validateNFTokenCreateOffer(tx: Record<string, unknown>): void {
|
||||||
|
validateBaseTransaction(tx)
|
||||||
|
|
||||||
|
if (tx.Account == null) {
|
||||||
|
throw new ValidationError('NFTokenCreateOffer: missing field Account')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tx.TokenID == null) {
|
||||||
|
throw new ValidationError('NFTokenCreateOffer: missing field TokenID')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tx.Amount == null) {
|
||||||
|
throw new ValidationError('NFTokenCreateOffer: missing field Amount')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof tx.Amount !== 'string' && !isAmount(tx.Amount)) {
|
||||||
|
throw new ValidationError('NFTokenCreateOffer: invalid Amount')
|
||||||
|
}
|
||||||
|
}
|
||||||
105
src/models/transactions/NFTokenMint.ts
Normal file
105
src/models/transactions/NFTokenMint.ts
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
import { ValidationError } from '../../errors'
|
||||||
|
|
||||||
|
import { BaseTransaction, GlobalFlags, validateBaseTransaction } from './common'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transaction Flags for an NFTokenMint Transaction.
|
||||||
|
*
|
||||||
|
* @category Transaction Flags
|
||||||
|
*/
|
||||||
|
export enum NFTokenMintFlags {
|
||||||
|
/**
|
||||||
|
* If set, indicates that the minted token may be burned by the issuer even
|
||||||
|
* if the issuer does not currently hold the token. The current holder of
|
||||||
|
* the token may always burn it.
|
||||||
|
*/
|
||||||
|
tfBurnable = 0x00000001,
|
||||||
|
/**
|
||||||
|
* If set, indicates that the token may only be offered or sold for XRP.
|
||||||
|
*/
|
||||||
|
tfOnlyXRP = 0x00000002,
|
||||||
|
/**
|
||||||
|
* If set, indicates that the issuer wants a trustline to be automatically
|
||||||
|
* created.
|
||||||
|
*/
|
||||||
|
tfTrustLine = 0x00000004,
|
||||||
|
/**
|
||||||
|
* If set, indicates that this NFT can be transferred. This flag has no
|
||||||
|
* effect if the token is being transferred from the issuer or to the
|
||||||
|
* issuer.
|
||||||
|
*/
|
||||||
|
tfTransferable = 0x00000008,
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map of flags to boolean values representing {@link NFTokenMint} transaction
|
||||||
|
* flags.
|
||||||
|
*
|
||||||
|
* @category Transaction Flags
|
||||||
|
*/
|
||||||
|
export interface NFTokenMintFlagsInterface extends GlobalFlags {
|
||||||
|
tfBurnable?: boolean
|
||||||
|
tfOnlyXRP?: boolean
|
||||||
|
tfTrustLine?: boolean
|
||||||
|
tfTransferable?: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The NFTokenMint transaction creates an NFToken object and adds it to the
|
||||||
|
* relevant NFTokenPage object of the minter. If the transaction is
|
||||||
|
* successful, the newly minted token will be owned by the minter account
|
||||||
|
* specified by the transaction.
|
||||||
|
*/
|
||||||
|
export interface NFTokenMint extends BaseTransaction {
|
||||||
|
TransactionType: 'NFTokenMint'
|
||||||
|
/**
|
||||||
|
* Indicates the taxon associated with this token. The taxon is generally a
|
||||||
|
* value chosen by the minter of the token and a given taxon may be used for
|
||||||
|
* multiple tokens. The implementation reserves taxon identifiers greater
|
||||||
|
* than or equal to 2147483648 (0x80000000).
|
||||||
|
*/
|
||||||
|
TokenTaxon: number
|
||||||
|
/**
|
||||||
|
* Indicates the account that should be the issuer of this token. This value
|
||||||
|
* is optional and should only be specified if the account executing the
|
||||||
|
* transaction is not the `Issuer` of the `NFToken` object. If it is
|
||||||
|
* present, the `MintAccount` field in the `AccountRoot` of the `Issuer`
|
||||||
|
* field must match the `Account`, otherwise the transaction will fail.
|
||||||
|
*/
|
||||||
|
Issuer?: string
|
||||||
|
/**
|
||||||
|
* Specifies the fee charged by the issuer for secondary sales of the Token,
|
||||||
|
* if such sales are allowed. Valid values for this field are between 0 and
|
||||||
|
* 50000 inclusive, allowing transfer rates between 0.000% and 50.000% in
|
||||||
|
* increments of 0.001%. This field must NOT be present if the
|
||||||
|
* `tfTransferable` flag is not set.
|
||||||
|
*/
|
||||||
|
TransferFee?: number
|
||||||
|
/**
|
||||||
|
* URI that points to the data and/or metadata associated with the NFT.
|
||||||
|
* This field need not be an HTTP or HTTPS URL; it could be an IPFS URI, a
|
||||||
|
* magnet link, immediate data encoded as an RFC2379 "data" URL, or even an
|
||||||
|
* opaque issuer-specific encoding. The URI is NOT checked for validity, but
|
||||||
|
* the field is limited to a maximum length of 256 bytes.
|
||||||
|
*/
|
||||||
|
URI?: string
|
||||||
|
Flags?: number | NFTokenMintFlagsInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Verify the form and type of an NFTokenMint at runtime.
|
||||||
|
*
|
||||||
|
* @param tx - An NFTokenMint Transaction.
|
||||||
|
* @throws When the NFTokenMint is Malformed.
|
||||||
|
*/
|
||||||
|
export function validateNFTokenMint(tx: Record<string, unknown>): void {
|
||||||
|
validateBaseTransaction(tx)
|
||||||
|
|
||||||
|
if (tx.Account == null) {
|
||||||
|
throw new ValidationError('NFTokenMint: missing field Account')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tx.TokenTaxon == null) {
|
||||||
|
throw new ValidationError('NFTokenMint: missing field TokenTaxon')
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -135,6 +135,12 @@ export interface AccountSet extends BaseTransaction {
|
|||||||
* digits. Valid values are 3 to 15 inclusive, or 0 to disable.
|
* digits. Valid values are 3 to 15 inclusive, or 0 to disable.
|
||||||
*/
|
*/
|
||||||
TickSize?: number
|
TickSize?: number
|
||||||
|
/**
|
||||||
|
* TODO check
|
||||||
|
* Sets an alternate account that is allowed to mint NFTokens on this
|
||||||
|
* account's behalf using NFTokenMint's `Issuer` field.
|
||||||
|
*/
|
||||||
|
Minter?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
const MIN_TICK_SIZE = 3
|
const MIN_TICK_SIZE = 3
|
||||||
|
|||||||
@@ -14,6 +14,19 @@ export { DepositPreauth } from './depositPreauth'
|
|||||||
export { EscrowCancel } from './escrowCancel'
|
export { EscrowCancel } from './escrowCancel'
|
||||||
export { EscrowCreate } from './escrowCreate'
|
export { EscrowCreate } from './escrowCreate'
|
||||||
export { EscrowFinish } from './escrowFinish'
|
export { EscrowFinish } from './escrowFinish'
|
||||||
|
export { NFTokenAcceptOffer } from './NFTokenAcceptOffer'
|
||||||
|
export { NFTokenBurn } from './NFTokenBurn'
|
||||||
|
export { NFTokenCancelOffer } from './NFTokenCancelOffer'
|
||||||
|
export {
|
||||||
|
NFTokenCreateOffer,
|
||||||
|
NFTokenCreateOfferFlags,
|
||||||
|
NFTokenCreateOfferFlagsInterface,
|
||||||
|
} from './NFTokenCreateOffer'
|
||||||
|
export {
|
||||||
|
NFTokenMint,
|
||||||
|
NFTokenMintFlags,
|
||||||
|
NFTokenMintFlagsInterface,
|
||||||
|
} from './NFTokenMint'
|
||||||
export { OfferCancel } from './offerCancel'
|
export { OfferCancel } from './offerCancel'
|
||||||
export {
|
export {
|
||||||
OfferCreateFlags,
|
OfferCreateFlags,
|
||||||
|
|||||||
@@ -17,6 +17,20 @@ import { EscrowCancel, validateEscrowCancel } from './escrowCancel'
|
|||||||
import { EscrowCreate, validateEscrowCreate } from './escrowCreate'
|
import { EscrowCreate, validateEscrowCreate } from './escrowCreate'
|
||||||
import { EscrowFinish, validateEscrowFinish } from './escrowFinish'
|
import { EscrowFinish, validateEscrowFinish } from './escrowFinish'
|
||||||
import { TransactionMetadata } from './metadata'
|
import { TransactionMetadata } from './metadata'
|
||||||
|
import {
|
||||||
|
NFTokenAcceptOffer,
|
||||||
|
validateNFTokenAcceptOffer,
|
||||||
|
} from './NFTokenAcceptOffer'
|
||||||
|
import { NFTokenBurn, validateNFTokenBurn } from './NFTokenBurn'
|
||||||
|
import {
|
||||||
|
NFTokenCancelOffer,
|
||||||
|
validateNFTokenCancelOffer,
|
||||||
|
} from './NFTokenCancelOffer'
|
||||||
|
import {
|
||||||
|
NFTokenCreateOffer,
|
||||||
|
validateNFTokenCreateOffer,
|
||||||
|
} from './NFTokenCreateOffer'
|
||||||
|
import { NFTokenMint, validateNFTokenMint } from './NFTokenMint'
|
||||||
import { OfferCancel, validateOfferCancel } from './offerCancel'
|
import { OfferCancel, validateOfferCancel } from './offerCancel'
|
||||||
import { OfferCreate, validateOfferCreate } from './offerCreate'
|
import { OfferCreate, validateOfferCreate } from './offerCreate'
|
||||||
import { Payment, validatePayment } from './payment'
|
import { Payment, validatePayment } from './payment'
|
||||||
@@ -50,6 +64,11 @@ export type Transaction =
|
|||||||
| EscrowCancel
|
| EscrowCancel
|
||||||
| EscrowCreate
|
| EscrowCreate
|
||||||
| EscrowFinish
|
| EscrowFinish
|
||||||
|
| NFTokenAcceptOffer
|
||||||
|
| NFTokenBurn
|
||||||
|
| NFTokenCancelOffer
|
||||||
|
| NFTokenCreateOffer
|
||||||
|
| NFTokenMint
|
||||||
| OfferCancel
|
| OfferCancel
|
||||||
| OfferCreate
|
| OfferCreate
|
||||||
| Payment
|
| Payment
|
||||||
@@ -124,6 +143,26 @@ export function validate(transaction: Record<string, unknown>): void {
|
|||||||
validateEscrowFinish(tx)
|
validateEscrowFinish(tx)
|
||||||
break
|
break
|
||||||
|
|
||||||
|
case 'NFTokenAcceptOffer':
|
||||||
|
validateNFTokenAcceptOffer(tx)
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'NFTokenBurn':
|
||||||
|
validateNFTokenBurn(tx)
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'NFTokenCancelOffer':
|
||||||
|
validateNFTokenCancelOffer(tx)
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'NFTokenCreateOffer':
|
||||||
|
validateNFTokenCreateOffer(tx)
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'NFTokenMint':
|
||||||
|
validateNFTokenMint(tx)
|
||||||
|
break
|
||||||
|
|
||||||
case 'OfferCancel':
|
case 'OfferCancel':
|
||||||
validateOfferCancel(tx)
|
validateOfferCancel(tx)
|
||||||
break
|
break
|
||||||
|
|||||||
Reference in New Issue
Block a user