> For the complete documentation index, see [llms.txt](https://docs.bifi.finance/biport-guide-kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bifi.finance/biport-guide-kr/api-documentation/api/biport-provider-api.md).

# Biport provider API

Biport은 사용자가 방문한 웹사이트에서 `window.biport` provider 객체를 통해 전역 JavaScript API를 주입합니다. 이 API를 사용하면 웹사이트가 사용자의 EVM 계정을 요청하고, 사용자가 연결된 블록체인에서 데이터를 읽을 수 있도록 하며, 사용자가 메시지와 트랜잭션에 서명하도록 제안할 수 있습니다.

Dapp에서는 이 공급자의 속성, 메서드 및 이벤트를 사용할 수 있습니다. 개발 환경을 설정한 후 시작할 수 있습니다.

### Properties <a href="#properties" id="properties"></a>

#### window\.biport.isBiport

사용자가 Biport를 설치했는지 여부를 확인하는 데 사용됩니다.&#x20;

[MetaMask 지원 기능](https://docs.bifi.finance/biport-guide-kr/undefined-1/undefined-3)을 활성화하면 `window.ethereum.isMetaMask` 속성을 `true` 로 설정하여 DApp 에게 메타마스크로 인식시킬 수 있습니다.&#x20;

### Methods

#### window\.biport.isConnected() <a href="#windowethereumisconnected" id="windowethereumisconnected"></a>

```typescript
window.biport.isConnected(): boolean;
```

현재 provider가 현재 체인에 연결되어 있는 경우 `true`를 반환합니다.

만약 provider가 연결되어 있지 않은 경우, 페이지를 다시 로드하여 연결을 다시 설정해야 합니다. 더 많은 정보는 `connect` 및 `disconnect` 이벤트를 참조하세요.

#### window\.biport.request(args) <a href="#windowethereumrequestargs" id="windowethereumrequestargs"></a>

```typescript
interface RequestArguments {
  method: string;
  params?: unknown[] | object;
}

window.biport.request(args: RequestArguments): Promise<unknown>;
```

Biport를 사용하여 네트워크에 RPC API 요청을 제출하려면 이 메서드를 사용합니다. 이 메서드는 RPC 메서드 호출의 결과를 반환하는 프로미스를 반환합니다.

매개변수와 반환 값은 RPC 메서드에 따라 다릅니다. 실제로 매개변수를 사용하는 경우 대부분이 Array\<any> 형식입니다.

요청이 실패하면 프로미스는 오류와 함께 거부됩니다.

다음은 `window.biport.request(args)`를 사용하여 `eth_sendTransaction`을 호출하는 예시입니다.

```javascript
params: [
  {
    from: '0xb60e8dd61c5d32be8058bb8eb970870f07233155',
    to: '0xd46e8dd67c5d32be8058bb8eb970870f07244567',
    gas: '0x76c0', // 30400
    gasPrice: '0x9184e72a000', // 10000000000000
    value: '0x9184e72a', // 2441406250
    data:
      '0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675',
  },
];

window.biport
  .request({
    method: 'eth_sendTransaction',
    params,
  })
  .then((result) => {
    // The result varies by RPC method.
    // For example, this method returns a transaction hash hexadecimal string upon success.
  })
  .catch((error) => {
    // If the request fails, the Promise rejects with an error.
  });
```

### Events

Biport 공급자는 Node.js EventEmitter API를 사용하여 이벤트를 발생시킵니다. 다음은 `accountsChanged` 이벤트를 수신하는 예시입니다. 이벤트 수신이 끝난 후에는 (예: React에서 컴포넌트가 unmount될 때) 리스너를 제거해야 합니다.

```javascript
function handleAccountsChanged(accounts) {
  // Handle new accounts, or lack thereof.
}

window.biport.on('accountsChanged', handleAccountsChanged);

// Later

window.biport.removeListener('accountsChanged', handleAccountsChanged);
```

#### accountsChanged <a href="#accountschanged" id="accountschanged"></a>

```typescript
window.biport.on('accountsChanged', handler: (accounts: Array<string>) => void);
```

provider는 `eth_accounts` RPC 메서드의 반환 값이 변경될 때 이벤트를 발생시킵니다. `eth_accounts`는 빈 배열이나 호출자가 액세스할 수 있는 가장 최근에 사용된 계정 주소를 포함하는 배열을 반환합니다. 호출자는 URL 원본으로 식별되며, 동일한 원본을 가진 모든 사이트는 동일한 권한을 공유합니다.

이는 공급자가 사용자의 노출된 계정 주소가 변경될 때 `accountsChanged` 이벤트를 발생시킨다는 것을 의미합니다. 이벤트를 수신하여 계정을 처리하세요.

#### chainChanged <a href="#chainchanged" id="chainchanged"></a>

```typescript
window.biport.on('chainChanged', handler: (chainId: string) => void);
```

provider는 현재 연결된 체인이 변경될 때 이벤트를 발생시킵니다. 이벤트를 수신하여 사용자의 네트워크를 감지하세요.

#### connect <a href="#connect" id="connect"></a>

```typescript
interface ConnectInfo {
  chainId: string;
}

window.biport.on('connect', handler: (connectInfo: ConnectInfo) => void);
```

provider가 체인에 대한 RPC 요청을 최초로 제출할 수 있는 상태가 되면 이 이벤트가 발생합니다. provider가 연결되었는지 여부를 결정하기 위해 이벤트를 수신하고 `window.biport.isConnected()` 공급자 메서드를 사용하는 것을 권장합니다.

#### disconnect <a href="#disconnect" id="disconnect"></a>

```typescript
window.biport.on('disconnect', handler: (error: ProviderRpcError) => void);
```

provider는 체인에 대한 RPC 요청을 제출할 수 없게 되면 이벤트를 발생시킵니다. 일반적으로 이는 네트워크 연결 문제나 예기치 않은 오류로 인해 발생합니다.

공급자가 이 이벤트를 발생시키면 체인과의 연결이 재설정될 때까지 새로운 요청을 받지 않습니다. 이는 페이지를 다시 로드해야 합니다. 공급자가 연결이 끊어졌는지 여부를 결정하기 위해 `window.`biport`.isConnected()` 공급자 메서드를 사용할 수도 있습니다.

#### Errors

Biport provider가 반환하는 모든 오류는 다음 인터페이스를 따릅니다:

```typescript
interface ProviderRpcError extends Error {
  message: string;
  code: number;
  data?: unknown;
}
```

`window.biport.request(args)` 공급자 메소드는 즉시 오류를 발생시킵니다. 요청이 실패한 이유를 확인하려면 오류 코드 속성을 사용할 수 있습니다. 일반적인 코드와 그 의미는 다음과 같습니다:

* `4001` - 사용자가 요청을 거부했습니다.&#x20;
* `-32602` - 매개변수가 잘못되었습니다.&#x20;
* `-32603` - 내부 오류가 발생했습니다.

모든 오류 목록은 EIP-1193 및 EIP-1474를 참조하세요.
