code: async function sendContractTransaction(payload) {
    const {
      args,
      props,
      method,
      interfaceName,
      contractInstance,
    } = payload
  
    const { privateKey } = props
    const contractMethod = contractInstance[method]
  
    const address = getAddressFromPrivateKey(privateKey)
  
    // Extend contract method args. Add transaction object as last argument
    const transactionObject = { from: address }
    args.push(transactionObject)
  
    const rawTx = await txUtils.getContractRawTx({ props, address, contractMethod, args })
    const signedTx = txUtils.signTx(rawTx, privateKey)
  
    return Promise
      .promisify(jWeb3.eth.sendRawTransaction)(signedTx)
      .timeout(
        config.promiseTimeout,
        new Error(`Can not submit ${interfaceName}.${method} within ${config.promiseTimeout}ms`)
      )
  }
docs: @async
  @function sendContractTransaction
  
  @description Sends contract transaction
  
  @param {object} payload - Payload object
  @param {object} payload.props - API function properties
  @param {string} payload.props.privateKey - Private key (64 hex symbols, without '0x' prefix)
  @param {object} payload.contractInstance - Contract instance
  @param {string} payload.interfaceName - Interface name
  @param {string} payload.method - Method name
  @param {array} payload.args - Method arguments
  
  @returns Promise that will be resolved with the hash of the contract transaction