Skip to main content

Bitcoin

getBitcoinSignedTransaction​

The DCENT iOS SDK provides functions for signing transaction of coins.

This function is for:

  • .BITCOIN - bitcoin (BTC)
  • .BITCOIN_SV - bitcoin sv (BSV)
  • .BTC_SEGWIT - bitcoin segwit (BTC)
  • .MONACOIN - monacoin (MONA)
  • .LITECOIN - litecoin (LTC)
  • .LTC_SEGWIT - litecoin segwit (LTC)
  • .ZCASH - zcash (ZEC)
  • .HORIZEN - horizen (ZEN)
  • .BITCOINCASH - bitcoin cash (BCH)
  • .DOGECOIN - dogecoin (DOGE)
  • .BCH_ABC - bitcoin cash abc (BCHA)
  • .ECASH - ecash (XEC)
  • .DASH - dash (DASH)
  • .BITCOIN_GOLD - bitcoin gold (BTG)
  • .DIGIBYTE - digibyte (DGB)
  • .DGB_SEGWIT - digibyte segwit (DGB)
  • .RAVENCOIN - ravencoin (RVN)
  • .BTC_TESTNET - bitcoin testnet (BTCt)
  • .BTC_SEGWIT_TESTNET - bitcoin segwit testnet (BTCt)
  • .MONA_TESTNET - monacoin testnet (MONAt)
  • .LITE_TESTNET - litecoin testnet (tLTC)
  • .LTC_SEGWIT_TESTNET - litecoin segwit testnet (tLTC)
  • .ZCASH_TESTNET - zcash testnet (TAZ)
  • .BCH_TESTNET - bitcoin cash testnet (tBCH)
  • .DASH_TESTNET - dash testnet (tDASH)
  • .BTG_TESTNET - bitcoin gold testnet (tBTG)
  • .DIGIBYTE_TESTNET - digibyte testnet (tDGB)
  • .DGB_SEGWIT_TESTNET - digibyte segwit testnet (tDGB)
  • .RVN_TESTNET - ravencoin testnet (tRVN)

Parameters​

  • coinType: bitcoin networks coin type
  • bitcoinTransaction: (BitcoinTransaction)bitcoin transaction parameter

class BitCoinTransaction​

This class to be used for bitcoin transaction.

NameTypeDescription
versionUInt32version of bitcoin transaction. Currently 1
- BCH /Dash/BTG : 2
- ZCASH : 4
inputUnspentTransactionOutputprevious transaction output information to be used
outputTransactionOutputcoin spending information
locktimeUInt32locktime for this transaction
optionParamString(optional)option parameter for this transaction in case ZCASH

class UnspentTransactionOutput​

The class for previous transaction output information to be used for bitcoin network transaction.

NameTypeDescription
prev_txStringfull of previous transaction data
utxo_idxUInt32index of previous transaction output to be sent
typeBtcTxtypebitcoin transaction type for this UTXO
keyStringBIP44 key path for unlocking UTXO

class TransactionOutput​

The class for coin spending information of Bitcoin network Transaction

NameTypeDescription
valueUInt64amount of coin to spend. Satoshi unit.
to[String]if type is p2pkh or p2sh, Base58Check encoded address of the receiver.
The value of the field may follow the rule of version prefix.(BITCOIN_BASE58CHECK)
if the type is p2pk , Base58Check encoded non-compressed public key without version prefix.
if the type is multisig , Base58Check encoded non-compressed public key (without version prefix) list.
if the type is change , BIP44 formatted PATH to get change address. In this case, the transaction type is assumed as p2pkh
typeBtcTxtypebitcoin network transaction type or this field can indicate output as a change

enum BtcTxtype​

  • p2Pkh: pay to public key hash
  • p2Pk: pay to public key
  • p2Sh: pay to script hash
  • change: indicate output as a change

Returns​

  • result: (Bool) true if successful, false if error occurred
  • txData: signed transaction

Example

let transactionOutput : TransactionOutput = TransactionOutput()
let unspentTransactionOutput : UnspentTransactionOutput = UnspentTransactionOutput()
var unspenttxOut : [UnspentTransactionOutput] = [UnspentTransactionOutput()]

unspenttxOut.append(unspentTransactionOutput)

let BtcTxData : BitcoinTransaction = BitcoinTransaction(version: 0, input: unspenttxOut, output: [transactionOutput], locktime: 0)

// test data
BtcTxData.version = 1
BtcTxData.input[1].prev_tx = "0100000001001355540aa694ddde95548de76168666f33d8fad420fab6c554180846676df1000000006a47304402205089f4b1bdb1f96786f4750af3c16a23c73b60de0fe3cfec0da906a181eea645022078047d56dded692477d35052e9179ac71f79c6ec6b5f49941056c03663255be9012103ac2a317f777d63a6bac857ba07e30920a0f2ebd3f99f15a92b8d295791a971f6ffffffff0230750000000000001976a914848d227771119767a8c08ee0b105633cbff2d6b688ac77180000000000001976a9145dadfc1f7c4548336912f23311b424310d6533c088ac00000000"
BtcTxData.input[1].type = BtcTxtype.p2Pkh
BtcTxData.input[1].utxo_idx = 1
BtcTxData.input[1].key = "m/44'/0'/0'/1/4"
BtcTxData.input[0].prev_tx = "0100000001076524b52baf87fe521e5b8a910fadd91c944f952520677def057e346a96380d000000006a473044022045a30be5dc493c36a3a55fd522b4aa2d795f49bb8b61507e1fca1c15819142c1022010846e11893840e521b277f31c1ca835d352fb582633e5ac95106d0ed52d1654012103b72bcab65c4ea43f4b700220729bdde9638c3bb70cc66b7a0de30738e8241382ffffffff0210270000000000001976a9149189ffd2039f1824de14562e592dc4bccaa57d6e88ac6a290000000000001976a9147046ed0f139552ada485f925e74f6576016fc55e88ac00000000"
BtcTxData.input[0].type = BtcTxtype.p2Pkh
BtcTxData.input[0].utxo_idx = 0
BtcTxData.input[0].key = "m/44'/0'/0'/0/2"
BtcTxData.output[0].to[0] = "1K8EfJgWR16Wo3Ejb3AtMk2mfoeAjmMtDL"
BtcTxData.output[0].type = BtcTxtype.p2Pkh
BtcTxData.output[0].value = 10000
BtcTxData.locktime = 0

DcentMgr.getBitcoinSignedTransaction(coinType: .BITCOIN, bitcoinTransaction: BtcTxData){ (result, txData) in
if result == false {
print("FAIL !!!")
}else{
print(txData)
}
}