ウォレットの連携
web3ウォレットやその他のdAppをMilkomedaと連携させる方法
分散型金融の未来を構築する
以下では、milkomeda-js-sdkパッケージを使ってMilkomeda上でweb3ウォレットを連携させる方法をご説明します。
ウォレットとMilkomedaプロトコルの連携
1. milkomeda-js-sdkパッケージをダウンロードする
milkomeda-js-sdkパッケージにはこちらからアクセスできます。 このパッケージは、Milkomedaデプロイメントの静的設定をホストしています。
これを利用すると、それぞれのプロジェクトでMilkomedaのハードコーディングの静的設定を連携する必要がなくなります。
2. milkomeda-js-sdkパッケージをインストールする
npmを使ってパッケージをインストールする場合:
npm i @dcspark/milkomeda-js-sdk
yarnを使ってパッケージをインストールする場合:
yarn add @dcspark/milkomeda-js-sdk
3. パッケージをプロジェクトにインポートする
importを使用する:
import { generateMilkomedaMetadata, milkomedaNetworks } from "@dcspark/milkomeda-js-sdk";
requireを使用する:
const milkomedaJsSdk = require("@dcspark/milkomeda-js-sdk");
milkomeda-js-sdkパッケージの詳細
Milkomeda-js-sdkは、Milkomedaデプロイメントの静的設定をホストするパッケージです。 これを利用すると、それぞれのプロジェクトでMilkomedaのハードコーディングの静的設定を連携する必要がなくなります。
| パラメーター | 概要 | 
|---|---|
| isMainnet | 特定のネットワークの構成がメインネット(Cardanoなど)かどうかを示すブーリアン | 
| mainchain | プロトコルやIDなど、メインチェーンの情報から構成される | 
| sidechain | プロトコル名(MilkomedaC1など)やサイドチェーンIDなど、サイドチェーンの情報から構成される | 
| backendEndpoint | サイドチェーンの特定のバージョンについての追加情報を示す、サービスのURL値を提供する | 
| protocolMagic | 適切なMilkomedaネットワークと互換性のあるプロトコルマジックを導入する | 
| timeIntervalForAddressMs | ミリ秒単位で定義された、アドレスを変更する際に必要となる時間の間隔 | 
| sidechainContract | 任意のクライアントが接続できるサイドチェーンコントラクトのアドレス | 
公開されたペイロードの例
以下は、Milkomedaネットワーク(Devnet)のペイロードを公開した例です。
{
    [NETWORK_NAME]: {
        isMainnet: false,
        name: NETWORK_NAME,
        mainchain: {
            protocol: ProtocolNames.cardanoProtocol,
            id: toChainId({
                networkId: registry.Testnet.NetworkId,
                networkMagic: registry.Testnet.NetworkMagic
            })
        },
        sidechain: { protocol: ProtocolNames.evmProtocol, id: 200101 },
        backendEndpoint: BackendEndpoints.devnet,
        protocolMagic: ProtocolMagic.devnet,
        timeIntervalForAddressMs: 86400000,
        sidechainContract: "0x000000000000000000000000000000000000BbBB"
    },
}
さらに、パッケージはMilkomedaのトランザクションに適したメタデータを作成するのに役立つヘルパーの型と関数を利用しています。
# Milkomeda metadata generator
generateMilkomedaMetadata(
    address, # address is EVM address
    protocolMagic # protocol magic for specific network
)
トランザクションのメタデータは2つのパラメーターで構成されます。 プロトコルマジック&EVMアドレスです。 テストネットトランザクションの一般的なメタデータは以下の通りです。
{
    87: "devnet.cardano-evm.c1"
    88: "0xEVM_TESTNET_ADDRESS"
}
トランザクションのMilkomedaメタデータを生成した例
generateMilkomedaMetadata("0x000… ", milkomedaNetworks["c1-devnet"].protocolMagic);
「0x000...」をEVMアドレスに置き換えてください :::
Milkomeda REST API
Milkomedaサイドチェーンに関するデータを取得するREST APIについて、Milkomeda-js-sdkパッケージ以外のものを導入しました。
この例では分かりやすくご説明するため、Flintウォレット連携を使っています。
REST APIのベースURLはmilkomeda-js-sdkを使ってbackendEndpointパラメーターとして提供されます。 以下のコードを使って、パッケージから取得することができます。
- Devnet
 - Mainnet
 
milkomedaNetworks["c1-devnet"].backendEndpoint
ベースURLがコードに含まれる場合、以下のエンドポイントのいずれかを使用できます。
- Stargate address (V1/stargate)
 
milkomedaNetworks["c1-mainnet"].backendEndpoint
結果: https://allowlist-mainnet.flint-wallet.com
ウォレットをMilkomedaメインネットに連携させる場合、別のエンドポイントを2つ使ってネットワーク上で許可されたEVMアドレスを取得する必要があります。 この[microservice](https://github.com/dcSpark/allowedlist-service/)の目的は、Milkomedaのブリッジを使用できるアドレスのリストを提供することです。
ベースURLがコードに含まれる場合、以下のエンドポイントのいずれかを使用できます。
- Stargate address (/V1/stargate)
 - fullAllowedList (/v1/fullAllowedList)
 
メインネットで許可されたEVMアドレスの配列が返されます
{
  "allowList": ["0x...", "0x..."]
:::
ベースURLがコードに含まれる場合、以下のエンドポイントのいずれかを使用できます。
- **Stargate address** ([/V1/stargate](https://allowlist-mainnet.flint-wallet.com/v1/stargate))
- **fullAllowedList** ([/v1/fullAllowedList](https://allowlist-mainnet.flint-wallet.com/v1/fullAllowedList))
メインネットで許可されたEVMアドレスの配列が返されます
```json
{
  "allowList": ["0x...", "0x..."]
}
- isAddress=0x (/v1/isAddressAllowed?address=0x)
 
提供されたアドレスが制限されたメインネット上で許可されているかどうかを示すブール値を返します。
Milkomeda REST APIスターゲートエンドポイントを使うと、Devnetとメインネットで同じペイロードのプロパティを取得できます。 以下は、Devnetのペイロードの例です。
{
    "current_address": "addr_test1wz6lvjg3anml96vl22mls5vae3x2cgaqwy2ewp5gj3fcxdcw652wz",
    "ttl_expiry": 1646438400000,
    "ada": {
        "minLovelace": "3000000",
        "fromADAFeeLovelace": "500000",
        "toADAFeeGWei": "500000"
    },
    "assets": [
        {
            "idCardano": "b4004c2f3edfdd2016d0fead9b927064f345534b000000000000000000000000",
            "idMilkomeda": "9c223e1dAf6184672E982d9AA560D9FD1d09A01B",
            "minCNTInt": "1",
            "minGWei": "1000000000"
        }
    …
    ]
}