# Provider API

### createSession(连接到Nabox钱包)

默认连接网络为当前插件所选链网络

```javascript
const res = NaboxWallet.nai.createSession();

// [NULSd6Hge.........8apXDR]
```

### sendTransaction(发送普通交易)

```javascript
const txParameters = {
    from: 'NULSd6Hge.........8apXDR', //必填发起交易地址，必须为已授权地址
    to: '', // 必填，接收地址
    value: '', // 必填，转账金额（注意：使用nai provider value为最小单位，nuls provider为实际转账金额）
    assetChainId: '',// 必填，链id，可通过浏览器获取对应的资产Id信息
    assetId: '', // 必填，资产id，可通过浏览器获取对应的资产Id信息
    contractAddress: '', // 如果是合约资产则必填
    remarks: 'reamrk' // 备注
};

const hash = await Nabox.nai.sendTransaction(txParameters); // 返回hash

// 753dcb3...
```

### signTransaction(签名普通交易)

```javascript
const txParameters = {
    from: 'NULSd6Hge.........8apXDR', //必填发起交易地址，必须为已授权地址
    to: 'NULSd6Hge.........8apXDR', // 必填，接收地址
    value: '', // 必填，转账金额（注意：使用nai provider value为最小单位，nuls provider为实际转账金额）
    assetChainId: '',// 必填，链id，可通过浏览器获取对应的资产Id信息
    assetId: '', // 必填，资产id，可通过浏览器获取对应的资产Id信息
    contractAddress: '', // 如果是合约资产则必填
    remarks: 'reamrk' // 备注
};

const txHex = await Nabox.nai.signTransaction(txParameters); // 返回签名后的txHex，广播可以得到hash

// 020000000000.............
```

### signTxHex(签名txHex)

```javascript
const txParameters = {
    address: 'NULS...', // 当前连接的地址
    txHex: '020000000000.........' // NULS AI/NERVE txHex
};
const signedHex = await NaboxWallet.nai.signTxHex(txParameters);

// 返回签名后的txHex 
```

### signNULSTransaction(签名NULS AI Ledger交易)

```javascript
const txParameters = {
    txHex: '020000000000.........' // NULS AI/NERVE txHex
};
const signedHex = await NaboxWallet.nai.signTxHex(txParameters);

// 返回签名后的txHex
```

### contractCreate(创建NULS AI合约)

```javascript
const data = {
    from:  'NULSd6Hge.........8apXDR', // 发起交易地址，必须为已授权地址
    alias: 'nec20', // 选填，合约别名
    contractCode: 'b2d2acecc....', // 必填，智能合约代码(字节码的Hex编码字符串)
    args: ["name", "symbol", ..] // 选填, 合约参数
};

const res = await NaboxWallet.nai.contractCreate(data);
// res示例
{
    hash: '753dcb3.....', // 创建合约的交易hash
    contractAddress: 'NULS.....' // 创建的合约地址
}
```

### contractCall(调用合约)

<pre class="language-java"><code class="lang-java"><strong>const data = {
</strong>    from: "NULSeBaMqpRQkHCs5ur3ck4LXEZB4qmmkPNo3", // 调用地址，必须为已授权地址
    value: 0, // 必填，NAI数量，（注意：使用nai provider value为最小单位，nuls provider为实际金额）
    contractAddress: "NULSeBaMzvqHiyBnr7c1TKYBLMHMvi1CcisAg", // 必填，调用的合约地址
    methodName: "transfer", // 必填，调用的合约方法
    methodDesc: "(Address to, BigInteger value) return boolean", // 可选，方法描述 
    args: ["tNULSeBaMt9Tf6VvfYfvUFGVqdiyPqFLfQg9La", "2"] // 必填，调用参数
    multyAssetValues: [[value,assetChainId,assetId], ...] // 可选，向合约地址转入的跨链资产信息（注意：使用nai provider value为最小单位，nuls provider为实际金额）
};

const hash = await NaboxWallet.nai.contractCall(data);
// '753dcb3.....'
</code></pre>

### invokeView(查看合约)

```javascript
const data = {
    contractAddress: "NULSeBaMzvqHiyBnr7c1TKYBLMHMvi1CcisAg", // 必填，合约地址
    methodName: "name", // 必填，合约方法
    methodDesc: "() return String", // 可选，方法描述
    args: [] // 可选
}
const res = await nabox.invokeView(data);
```

### transactionSerialize(交易序列化)

发送已经组装的交易

```javascript
const txParameters = {
    address, // 发送地址
    inputs, // inputs
    outputs, // outputs
    type, // 交易类型
    txData, // 合约交易的txData
    remarks, // 交易的备注信息
};
const hash = await NaboxWallet.nai.transactionSerialize(txParameters);
// '753dcb3.....'
```

### signMessage(消息签名)

```javascript
const hex = await NaboxWallet.nai.signMessage([message, address]);

// 返回签名后的messsage
```

### getPub(获取当前连接的账户公钥)

```javascript
const pub = await NaboxWallet.nai.getPub();

// 00149393d565.................2c2f2bf04d2700
```

### sendDepositeTransaction(发送NAI质押交易)

```javascript
const depositeData = {
  from: "NULSeBaMrbMRiFAUeeAt6swb4xVBNyi8121" // 必填，当前连接的账户地址
  assetChainId: "1", // 必填，链id
  assetId: "1", // 必填，资产id
  depositValue: 200000000000, // 必填，质押数量，（注意：使用nai provider value为最小单位，nuls provider为实际金额）
  agentHash: "62d93af0d6fd90f68bd1813f2......af2694c39ce6cad488c5cee9361" // 委托的节点hash
}
const hash = await NaboxWallet.nai.sendDepositTransaction(depositeData); // 返回交易hash
// '753dcb3.....'
```

### sendWithDrawTransaction

<pre class="language-javascript"><code class="lang-javascript">const withdrawData = {
<strong>  from: "NULSeBaMrbMRiFAUeeAt6swb4xVBNyi8121" // 必填，当前连接的账户地址
</strong>  assetChainId: "1", // 必填，链id
  assetId: "1", // 必填，资产id
  withdrawAmount: 200000000000,// 必填，质押数量，（注意：使用nai provider value为最小单位，nuls provider为实际金额）
  depositHash: "62d93af0d6fd90f68bd181........694c39ce6cad488c5cee9361" // 必填，加入共识交易hash
};

const hash = await NaboxWallet.nai.sendWithDrawTransaction(depositeData); // 返回交易hash
// '753dcb3.....'
</code></pre>

### on(事件监听)

```
// 账户切换
NaboxWallet.nai.on("accountsChanged", (accounts) => {
  if (accounts.length) {
    console.log(accounts[0]);
    // NULS.......
  }
});
```
