Skip to content

sendTransaction

Send a TBC chain transaction. Supports a wide range of operations including P2PKH transfers, NFT operations, FT operations, PoolNFT liquidity management, and stablecoin operations.

Usage

ts
const params = [{ flag: "P2PKH", address: "recipient", satoshis: 10000 }];
const { txid } = await Turing.sendTransaction(params);

Interface Definitions

ts
interface FTData {
  name: string;
  symbol: string;
  decimal: number;
  amount: number;
}

interface CollectionData {
  collectionName: string;
  description: string;
  supply: number;
  file: string; // base64
}

interface NFTData {
  nftName: string;
  symbol: string;
  description: string;
  attributes: string;
  file?: string; // base64
}

interface RequestParam {
  flag: "P2PKH" | "COLLECTION_CREATE" | "NFT_CREATE" | "NFT_TRANSFER" | "FT_MINT" | "FT_TRANSFER" | "FT_MERGE" | "POOLNFT_MINT" | "POOLNFT_INIT" | "POOLNFT_LP_INCREASE" | "POOLNFT_LP_CONSUME" | "POOLNFT_LP_BURN" | "POOLNFT_SWAP_TO_TOKEN" | "POOLNFT_SWAP_TO_TBC" | "POOLNFT_MERGE" | "FTLP_MERGE" | "STABLECOIN_TRANSFER" | "STABLECOIN_MERGE";
  address?: string;
  satoshis?: number | string;              // In satoshis, use string for large numbers
  collection_data?: string;
  ft_data?: string;
  nft_data?: string;
  collection_id?: string;
  nft_contract_address?: string;
  ft_contract_address?: string;            // FT or stablecoin contract transaction ID
  tbc_amount?: number | string;            // Use string for large numbers
  ft_amount?: number | string;             // Use string for large numbers
  merge_times?: number;
  with_lock?: boolean;
  lpCostAddress?: string;
  lpCostAmount?: number | string;          // Use string for large numbers
  pubKeyLock?: string[];
  poolNFT_version?: 1 | 2;                // Forced to 2, other values will be converted to 2
  serviceFeeRate?: number;
  serverProvider_tag?: string;
  lpPlan?: 1 | 2 | 3 | 4 | 5;              // Defaults to 1
  domain?: string;
  isLockTime?: boolean;
  lockTime?: number | string;              // Lock until specified block height (POOLNFT related), use string for large numbers
  broadcastEnabled?: boolean;
}

const params = [param: RequestParam];

Returns

ts
interface SendTransactionResponse {
  txid?: string;   // Transaction ID (when broadcastEnabled is true)
  txraw?: string;  // Raw signed transaction hex (when broadcastEnabled is false)
  error?: string;  // Error message on failure
}
FieldTypeDescription
txidstringTransaction ID on successful broadcast
txrawstringRaw transaction hex when broadcastEnabled is false
errorstringError message if the transaction fails

Error Handling

ts
const result = await Turing.sendTransaction(params);

if (result.error) {
  console.error("Transaction failed:", result.error);
  return;
}

console.log("Success! txid:", result.txid);

Transaction Types

Contract Transactions Playground

Choose NFT, FT, PoolNFT, or Stablecoin first, then select a concrete operation. Templates disable broadcasting by default. FT_MERGE, POOLNFT_MERGE, FTLP_MERGE, and STABLECOIN_MERGE broadcast when invoked and require explicit risk confirmation.

Live Example

Turing.sendTransaction() / Contracts

Unknown
Use the wallet control in the top navigation before running this example.
Active Wallet NetworkUnknown

Mainnet uses api.turingbitchain.io. Fill domain for testnet or custom nodes.

Includes sample data. External controls manage flag, domain, and broadcastEnabled.

Switch the wallet to TBC or All networks first.

Code Preview
const params = [{
  "flag": "COLLECTION_CREATE",
  "collection_data": "{\"collectionName\":\"Docs Collection\",\"description\":\"Created from the wallet playground\",\"supply\":1,\"file\":\"R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=\"}",
  "broadcastEnabled": false
}];

const result = await Turing.sendTransaction(params);
console.log(result);
Make sure the browser extension is enabled, or open this page inside Turing Wallet on mobile.

P2PKH

Send a standard P2PKH transaction to transfer TBC to a recipient address.

ts
const params = [
  {
    flag: "P2PKH",               // Required
    address: "",                  // Required, recipient address
    satoshis: 0,                  // Required, amount in satoshis
    broadcastEnabled: true,       // Optional, defaults to true
    domain: "",                   // Optional, defaults to api.turingbitchain.io
  },
];

const { txid } = await Turing.sendTransaction(params); // When broadcastEnabled is true
// const { txraw } = await Turing.sendTransaction(params); // When broadcastEnabled is false
// const { error } = await Turing.sendTransaction(params); // When an error occurs

Live Example

Live Example

Turing.sendTransaction() / P2PKH

Unknown
Use the wallet control in the top navigation before running this example.
Active Wallet NetworkUnknown

Switch the wallet to TBC or All networks first.

Switch the wallet to TBC or All networks first.

Code Preview
const params = [{
  "flag": "P2PKH",
  "address": "1BitcoinEaterAddressDontSendf59kuE",
  "satoshis": "10000",
  "broadcastEnabled": false
}];

const result = await Turing.sendTransaction(params);
console.log(result);
Make sure the browser extension is enabled, or open this page inside Turing Wallet on mobile.

COLLECTION_CREATE

Create a new NFT collection with metadata including name, description, supply, and an image file.

ts
const params = [
  {
    flag: "COLLECTION_CREATE",    // Required
    collection_data: "",          // Required, CollectionData in JSON format
    broadcastEnabled: true,       // Optional, defaults to true
    domain: "",                   // Optional
  },
];

const { txid } = await Turing.sendTransaction(params);
// const { txraw } = await Turing.sendTransaction(params); // When broadcastEnabled is false
// const { error } = await Turing.sendTransaction(params); // When an error occurs

NFT_CREATE

Create a new NFT within an existing collection.

ts
const params = [
  {
    flag: "NFT_CREATE",           // Required
    collection_id: "",            // Required, collection ID
    nft_data: "",                 // Required, NFTData in JSON format
    broadcastEnabled: true,       // Optional, defaults to true
    domain: "",                   // Optional
  },
];

const { txid } = await Turing.sendTransaction(params);
// const { txraw } = await Turing.sendTransaction(params); // When broadcastEnabled is false
// const { error } = await Turing.sendTransaction(params); // When an error occurs

NFT_TRANSFER

Transfer an NFT to another address.

ts
const params = [
  {
    flag: "NFT_TRANSFER",         // Required
    nft_contract_address: "",     // Required, NFT contract address
    address: "",                  // Required, recipient address
    broadcastEnabled: true,       // Optional, defaults to true
    domain: "",                   // Optional
  },
];

const { txid } = await Turing.sendTransaction(params);
// const { txraw } = await Turing.sendTransaction(params); // When broadcastEnabled is false
// const { error } = await Turing.sendTransaction(params); // When an error occurs

FT_MINT

Mint a new fungible token with specified name, symbol, decimal places, and initial supply.

ts
const params = [
  {
    flag: "FT_MINT",              // Required
    ft_data: "",                  // Required, FTData in JSON format
    broadcastEnabled: true,       // Optional, defaults to true
    domain: "",                   // Optional
  },
];

const { txid } = await Turing.sendTransaction(params);
// const { txraw } = await Turing.sendTransaction(params); // When broadcastEnabled is false, the returned txraw contains two transactions separated by commas, which need to be broadcast in batch, ensuring the first txraw is broadcast first
// const { error } = await Turing.sendTransaction(params); // When an error occurs

FT_TRANSFER

Transfer fungible tokens to a recipient. Optionally transfer TBC simultaneously.

ts
const params = [
  {
    flag: "FT_TRANSFER",          // Required
    ft_contract_address: "",      // Required, FT contract address
    address: "",                  // Required, recipient address
    ft_amount: 0,                 // Required, FT amount to transfer
    tbc_amount: 0,                // Optional, TBC amount to transfer simultaneously, defaults to 0
    broadcastEnabled: true,       // Optional, defaults to true
    domain: "",                   // Optional
  },
];

const { txid } = await Turing.sendTransaction(params);
// const { txraw } = await Turing.sendTransaction(params); // When broadcastEnabled is false
// const { error } = await Turing.sendTransaction(params); // When an error occurs

FT_MERGE

Merge FT UTXOs to consolidate fragmented token holdings.

ts
const params = [
  {
    flag: "FT_MERGE",             // Required
    ft_contract_address: "",      // Required, FT contract address
    domain: "",                   // Optional
  },
];

const { txid } = await Turing.sendTransaction(params); // txid is multiple Merge transaction txids separated by commas
// const { error } = await Turing.sendTransaction(params); // When an error occurs

POOLNFT_MINT

Mint a PoolNFT to create a new liquidity pool for a fungible token. Supports optional hash lock and lock time configurations.

ts
const params = [
  {
    flag: "POOLNFT_MINT",         // Required
    ft_contract_address: "",      // Required, FT contract address
    serverProvider_tag: "",       // Required, service provider tag
    poolNFT_version: 2,           // Optional, forced to 2
    serviceFeeRate: 25,           // Optional, any positive integer, defaults to 25
    with_lock: false,             // Optional, defaults to false; when true, creates a poolNFT with hash lock
    pubKeyLock: ["pubkey1", "pubkey2"], // Required when with_lock is true
    lpCostAddress: "",            // Required when with_lock is true, address for deducting liquidity addition costs
    lpCostAmount: 0,              // Required when with_lock is true, TBC amount for deducting liquidity addition costs
    lpPlan: 1,                    // Optional, 1-5, defaults to 1
    isLockTime: false,            // Optional, defaults to false
    broadcastEnabled: true,       // Optional, defaults to true
    domain: "",                   // Optional
  },
];

const { txid } = await Turing.sendTransaction(params);
// const { txraw } = await Turing.sendTransaction(params); // When broadcastEnabled is false, the returned txraw contains two transactions separated by commas, which need to be broadcast in batch, ensuring the first txraw is broadcast first
// const { error } = await Turing.sendTransaction(params); // When an error occurs

POOLNFT_INIT

Initialize a PoolNFT liquidity pool with initial TBC and FT amounts.

ts
const params = [
  {
    flag: "POOLNFT_INIT",         // Required
    nft_contract_address: "",     // Required, PoolNFT contract address
    address: "",                  // Required, recipient address
    tbc_amount: 0,                // Required, initial TBC amount
    ft_amount: 0,                 // Required, initial FT amount
    poolNFT_version: 2,           // Optional, forced to 2
    lockTime: 0,                  // Optional, lock until the specified block height
    broadcastEnabled: true,       // Optional, defaults to true
    domain: "",                   // Optional
  },
];

const { txid } = await Turing.sendTransaction(params);
// const { txraw } = await Turing.sendTransaction(params); // When broadcastEnabled is false
// const { error } = await Turing.sendTransaction(params); // When an error occurs

POOLNFT_LP_INCREASE

Increase liquidity in a PoolNFT pool by adding TBC.

ts
const params = [
  {
    flag: "POOLNFT_LP_INCREASE",  // Required
    nft_contract_address: "",     // Required, PoolNFT contract address
    address: "",                  // Required, recipient address
    tbc_amount: 0,                // Required, TBC amount to add
    poolNFT_version: 2,           // Optional, forced to 2
    lockTime: 0,                  // Optional, lock until the specified block height
    broadcastEnabled: true,       // Optional, defaults to true
    domain: "",                   // Optional
  },
];

const { txid } = await Turing.sendTransaction(params);
// const { txraw } = await Turing.sendTransaction(params); // When broadcastEnabled is false
// const { error } = await Turing.sendTransaction(params); // When an error occurs

POOLNFT_LP_CONSUME

Consume liquidity from a PoolNFT pool by redeeming LP tokens.

ts
const params = [
  {
    flag: "POOLNFT_LP_CONSUME",   // Required
    nft_contract_address: "",     // Required, PoolNFT contract address
    address: "",                  // Required, recipient address
    ft_amount: 0,                 // Required, FT LP amount to consume
    poolNFT_version: 2,           // Optional, forced to 2
    lockTime: 0,                  // Optional, manually set unlock parameters to the maximum unlockable block height. If lock-up is enabled without this parameter, unlock parameters will be automatically set to (current block height - 2)
    broadcastEnabled: true,       // Optional, defaults to true
    domain: "",                   // Optional
  },
];

const { txid } = await Turing.sendTransaction(params);
// const { txraw } = await Turing.sendTransaction(params); // When broadcastEnabled is false
// const { error } = await Turing.sendTransaction(params); // When an error occurs

Live Example

Live Example

Turing.sendTransaction() / PoolNFT

Unknown
Use the wallet control in the top navigation before running this example.
Active Wallet NetworkUnknown

The wallet network is not confirmed. Refresh it and switch to TBC or All networks before broadcasting.

The wallet network is not confirmed. Refresh it and switch to TBC or All networks before broadcasting.

Code Preview
const params = [{
  "flag": "POOLNFT_LP_CONSUME",
  "nft_contract_address": "2222222222222222222222222222222222222222222222222222222222222222",
  "address": "1BitcoinEaterAddressDontSendf59kuE",
  "poolNFT_version": 2,
  "broadcastEnabled": false,
  "ft_amount": "1",
  "lockTime": "0"
}];

const result = await Turing.sendTransaction(params);
console.log(result);
Make sure the browser extension is enabled, or open this page inside Turing Wallet on mobile.

POOLNFT_LP_BURN

Burn all LP tokens from a PoolNFT pool.

ts
const params = [
  {
    flag: "POOLNFT_LP_BURN",      // Required
    nft_contract_address: "",     // Required, PoolNFT contract address
    poolNFT_version: 2,           // Optional, forced to 2
    broadcastEnabled: true,       // Optional, defaults to true
    domain: "",                   // Optional
  },
];

const { txid } = await Turing.sendTransaction(params);
// const { txraw } = await Turing.sendTransaction(params); // When broadcastEnabled is false
// const { error } = await Turing.sendTransaction(params); // When an error occurs

POOLNFT_SWAP_TO_TOKEN

Swap TBC for tokens in a PoolNFT liquidity pool.

ts
const params = [
  {
    flag: "POOLNFT_SWAP_TO_TOKEN", // Required
    nft_contract_address: "",      // Required, PoolNFT contract address
    address: "",                   // Required, recipient address
    tbc_amount: 0,                 // Required, TBC amount to swap
    poolNFT_version: 2,            // Optional, forced to 2
    lpPlan: 1,                     // Optional, 1-5, defaults to 1
    broadcastEnabled: true,        // Optional, defaults to true
    domain: "",                    // Optional
  },
];

const { txid } = await Turing.sendTransaction(params);
// const { txraw } = await Turing.sendTransaction(params); // When broadcastEnabled is false
// const { error } = await Turing.sendTransaction(params); // When an error occurs

Live Example

Live Example

Turing.sendTransaction() / PoolNFT

Unknown
Use the wallet control in the top navigation before running this example.
Active Wallet NetworkUnknown

The wallet network is not confirmed. Refresh it and switch to TBC or All networks before broadcasting.

The wallet network is not confirmed. Refresh it and switch to TBC or All networks before broadcasting.

Code Preview
const params = [{
  "flag": "POOLNFT_SWAP_TO_TOKEN",
  "nft_contract_address": "2222222222222222222222222222222222222222222222222222222222222222",
  "address": "1BitcoinEaterAddressDontSendf59kuE",
  "poolNFT_version": 2,
  "broadcastEnabled": false,
  "tbc_amount": "1",
  "lpPlan": 1
}];

const result = await Turing.sendTransaction(params);
console.log(result);
Make sure the browser extension is enabled, or open this page inside Turing Wallet on mobile.

POOLNFT_SWAP_TO_TBC

Swap tokens for TBC in a PoolNFT liquidity pool.

ts
const params = [
  {
    flag: "POOLNFT_SWAP_TO_TBC",  // Required
    nft_contract_address: "",     // Required, PoolNFT contract address
    address: "",                  // Required, recipient address
    ft_amount: 0,                 // Required, FT amount to swap
    poolNFT_version: 2,           // Optional, forced to 2
    lpPlan: 1,                    // Optional, 1-5, defaults to 1
    broadcastEnabled: true,       // Optional, defaults to true
    domain: "",                   // Optional
  },
];

const { txid } = await Turing.sendTransaction(params);
// const { txraw } = await Turing.sendTransaction(params); // When broadcastEnabled is false
// const { error } = await Turing.sendTransaction(params); // When an error occurs

Live Example

Live Example

Turing.sendTransaction() / PoolNFT

Unknown
Use the wallet control in the top navigation before running this example.
Active Wallet NetworkUnknown

The wallet network is not confirmed. Refresh it and switch to TBC or All networks before broadcasting.

The wallet network is not confirmed. Refresh it and switch to TBC or All networks before broadcasting.

Code Preview
const params = [{
  "flag": "POOLNFT_SWAP_TO_TBC",
  "nft_contract_address": "2222222222222222222222222222222222222222222222222222222222222222",
  "address": "1BitcoinEaterAddressDontSendf59kuE",
  "poolNFT_version": 2,
  "broadcastEnabled": false,
  "ft_amount": "1",
  "lpPlan": 1
}];

const result = await Turing.sendTransaction(params);
console.log(result);
Make sure the browser extension is enabled, or open this page inside Turing Wallet on mobile.

POOLNFT_MERGE

Merge PoolNFT-related UTXOs to consolidate pool state.

ts
const params = [
  {
    flag: "POOLNFT_MERGE",        // Required
    nft_contract_address: "",     // Required, PoolNFT contract address
    poolNFT_version: 2,           // Optional, forced to 2
    merge_times: 10,              // Optional, 1-10 times, defaults to 10, terminates early if fewer
    domain: "",                   // Optional
  },
];

const { txid } = await Turing.sendTransaction(params); // txid is multiple Merge transaction txids separated by commas
// const { error } = await Turing.sendTransaction(params); // When an error occurs

FTLP_MERGE

Merge FTLP UTXOs to consolidate LP token holdings.

ts
const params = [
  {
    flag: "FTLP_MERGE",           // Required
    nft_contract_address: "",     // Required, PoolNFT contract address
    poolNFT_version: 2,           // Optional, forced to 2
    lockTime: 0,                  // Optional, manually set unlock parameters to the maximum unlockable block height. If lock-up is enabled without this parameter, unlock parameters will be automatically set to (current block height - 2)
    domain: "",                   // Optional
  },
];

const { txid } = await Turing.sendTransaction(params); // txid is multiple Merge transaction txids separated by commas
// const { error } = await Turing.sendTransaction(params); // When an error occurs

STABLECOIN_TRANSFER

Transfer stablecoins to a recipient address. Optionally transfer TBC simultaneously.

ts
const params = [
  {
    flag: "STABLECOIN_TRANSFER",     // Required
    ft_contract_address: "",         // Required, stablecoin contract transaction ID
    address: "",                     // Required, recipient address
    ft_amount: 1000,                 // Required, transfer amount, use string for large numbers
    tbc_amount: 0,                   // Optional, set this value when transferring both TBC and stablecoins
    broadcastEnabled: true,          // Optional, defaults to true
    domain: "",                      // Optional
  },
];

const { txid } = await Turing.sendTransaction(params);
// const { txraw } = await Turing.sendTransaction(params); // When broadcastEnabled is false
// const { error } = await Turing.sendTransaction(params); // When an error occurs

STABLECOIN_MERGE

Merge stablecoin UTXOs to consolidate holdings (requires all coinutxos to be on-chain).

ts
const params = [
  {
    flag: "STABLECOIN_MERGE",        // Required
    ft_contract_address: "",         // Required, stablecoin contract transaction ID
    domain: "",                      // Optional
  },
];

const { txid } = await Turing.sendTransaction(params); // txid is multiple Merge transaction txids separated by commas
// const { error } = await Turing.sendTransaction(params); // When an error occurs