> For the complete documentation index, see [llms.txt](https://docs.iopay.me/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.iopay.me/bitcoin.md).

# BitCoin

### Detecting the Provider

Once ioPay Wallet is installed and running, you should find that ioPay's mobile in-app browser have a `window.ioPay` object available in the developer console.&#x20;

### Method

***requestAccounts()***:  Connect the current account.

#### Returns:

* `Promise` - `string`: address of current account

#### Example:

```
try {
  let accounts = await window.ioPay.requestAccounts();
  console.log('connect success', accounts);
} catch (e) {
  console.log('connect failed');
}
> connect success ['mfaCeWXkqRTPG85mLXMbBZEJRS8b7bw4Kb']
```

### Method

***getPublicKey()***

#### Returns:

* `Promise` - `string`: publicKey

#### Example:

```
try {
  let res = await window.ioPay.getPublicKey();
  console.log(res)
} catch (e) {
  console.log(e);
}
> 0668e8db9f4a2bc19219058467bb12d4c07952da52e71b8d409684c918b4fd1f
```

### Method

#### signMessage <a href="#signmessage" id="signmessage"></a>

```
ioPay.signMessage(msg)
```

**Parameters**

* `msg` - `string`: a string to sign

**Returns**

* `Promise` - `string`: the signature.

**Example:**

```
// sign by ecdsa
try {
  let res = await window.ioPay.signMessage("welcome to ioPay");
  console.log(res)
} catch (e) {}
```

### Method

#### signPsbt <a href="#signpsbt" id="signpsbt"></a>

```
ioPay.signPsbt(psbtHex[, options])
```

This method will traverse all inputs that match the current address to sign.

**Parameters**

* `psbtHex` - `string`: the hex string of psbt to sign
* options
  * `autoFinalized` - `boolean`: whether finalize psbt after signing, default is true
  * `toSignInputs` - `array`:
    * `index` - `number`: which input to sign
    * `address` - `string`: (at least specify either an address or a publicKey) Which corresponding private key to use for signing
    * `publicKey` - `string`: (at least specify either an address or a publicKey) Which corresponding private key to use for signing
    * `sighashTypes` - `number[]`: (optionals) sighashTypes
    * `disableTweakSigner` - `boolean` :(optionals) When signing and unlocking Taproot addresses, the `tweakSigner` is used by default for signature generation. Enabling this allows for signing with the original private key.

**Returns:**

* `Promise` - `string`: the hex string of signed psbt

**Example:**

```
try {
  let res = await window.ioPay.signPsbt(
    "87543231ff53337a....",
    {
        autoFinalized:false,
        toSignInputs:[
          {
            index: 0,
            address: "tb1qtmjmeglfdqphtqq3yq3t6ruq3tvkfx2u6f7n83",
          },
          {
            index: 1,
            publicKey: "76382...83846262f",
            sighashTypes: [1]
          },
          {
            index: 2,
            publicKey: "76382...83846262f",
          }
        ]
    }
  );
  console.log(res)
} catch (e) {
  console.log(e);
}
```
