見出し画像

Nymを搭載したWebアプリの開発が非常に簡単に

Nym TypeScript SDKの最新版が登場、一般アプリ開発者に前例のないトラフィックパターン保護をもたらす

Nym TypeScript SDKの最新バージョンを使用すると、アプリケーションに本当のプライバシーを組み込むことがずっと簡単になりました。

TypeScript SDK for in-browser webapps


このTypeScript SDKは、ビルダーやライブラリのメンテナー、オペレーター、プライバシー愛好家を対象としており、プロジェクトがNymスタックを自社のインフラに取り込むことを可能にします。例えば、mix node、コントラクトクライアント、mixFetch、またはzk-nymの匿名クレデンシャルなどです。

要するに、SDKを使用する個人は、次のことを完全にブラウザ上で実行できます。

・Nym mixnetを実行するスマートコントラクト上でクエリを実行すること

Nyxブロックチェーンは汎用のCosmWasm対応スマートコントラクトプラットフォームであり、その中にはNym mixnetを追跡するスマートコントラクトが含まれています。

Nym Mixnetスマートコントラクトクライアントを使用して、ビルダーは署名キーを提供する際にコントラクトの状態をクエリしたり、メソッドを実行したりすることができます。

・Nym mixnetを介してトラフィックを送受信すること

Nym mixnetはネットワークレベルの監視に対して非常に強力なセキュリティ保証を提供します。これは、多くのユーザーからのIPトラフィックをパケットに包み込み、mixnet内でmixされます。Sphinxパケットトラフィックを暗号化しmixすることで、誰が誰と通信しているかを特定できないようにしています。

・mixFetchを使用する - これはfetch APIと似ていますが、mixnetを介して行います

MixFetchはfetch APIの代替として使用され、Nym mixnetを介してHTTPリクエストを送信するために使用されます。これは‘vanilla’ fetchと同じ引数を取得し、それからSOCKS5 Network Requester経由でインターネット上の宛先ホストに対してSOCKS5リクエストを構築して行います。

・CosmosKitを使用して、Nymインフラストラクチャを介してCosmosベースのコンポーネントを実行する
Coconut暗号署名方式に基づく匿名クレデンシャルシステムであるzk-nymsを作成および消費すること

これは現在進行中の作業ですが、近々追加され、文書化される予定です。これにより、リソースアクセス制御に関心を持つアプリケーションプログラマーが新しい考え方とコーディングを行えます。そして最も重要なことは、zk-nymsがビルダーに匿名で支払いを行うことを可能にするということです。

SDKとパッケージのバリアント概要


NymスマートコントラクトはESMバージョンのみで提供されていますが、mixnetクライアントとmixFetchはESM、CommonJS、unbundled、およびpre-bundled(full-fat)の4つのバリアントで利用可能です。

詳細なパッケージの種類については、こちらのページで確認できます。それぞれの詳細についても記載されています。

素晴らしい!箱から出してすぐに始めるためには何が必要ですか?


SDKはまだ作業中であり、ドキュメントは今後数週間で進化していきます。

ただし、この段階では、ビルダーはfull-fatバージョンのさまざまなクライアントを使用するためにViteをバンドラとして使用することが推奨されています。

Webpackなどの他のバンドラに関するドキュメントはこちらで見つけることができます。

ステップバイステップのチュートリアル


「Examples」セクションには、各SDKクライアントを独立した環境で使用する方法についての基本的なガイドとなるステップバイステップのチュートリアルがあります。

例:TypeScript SDKを使用してNym mixnetを介してトラフィックを送信する


mixnetを介してメッセージを送受信するには、SDK Clientを使用する必要があります。これにより、Nym mixnetとzk-nymsのクレデンシャルを使用できるアプリケーションを作成できます。

クライアントの詳細については、こちらで確認できます。

以下には、Vite、TS、およびReactを使用してNym mixnetを介してトラフィックを送信する基本的なraw versionのメッセージングアプリケーションを作成するチュートリアルがあります。

または、Nextraに特化した開発者用ライブプレイグラウンドでこのアプリを直接テストすることもできます。

環境構築

作成し、ディレクトリにcdを入れ、環境をセットアップする:

npm create vite@latest

このチュートリアルに従ってアプリをすぐに動作させたい場合は、「React」を選択し、その後「TypeScript」を選択して環境設定を行う。

そして実行する:

cd <app_name>
npm i
npm run dev

インストール

必要なパッケージをすべてインストールする:

npm i @nymproject/sdk-full-fat

インポート

モジュールからインポート

import { createNymMixnetClient, NymMixnetClient, Payload } from "@nymproject/sdk-full-fat";

アプリの構築

以下のサンプルコードを貼り付けることで、未対応のmixnetアプリのテンプレートでも、mixnet経由でメッセージを送受信できるようになります。

import "./App.css";
import { useEffect, useState } from "react";
import {
createNymMixnetClient,
NymMixnetClient,
Payload,
} from "@nymproject/sdk-full-fat";

const nymApiUrl = "https://validator.nymtech.net/api";

export function MixnetClient() {
const [nym, setNym] = useState<NymMixnetClient>();
const [selfAddress, setSelfAddress] = useState<string>();
const [recipient, setRecipient] = useState<string>();
const [payload, setPayload] = useState<Payload>();
const [receivedMessage, setReceivedMessage] = useState<string>();

const init = async () => {
const client = await createNymMixnetClient();
setNym(client);

// Start the client and connect to a gateway
await client?.client.start({
clientId: crypto.randomUUID(),
nymApiUrl,
forceTls: true, // force WSS
});

// Check when is connected and set the self address
client?.events.subscribeToConnected((e) => {
const { address } = e.args;
setSelfAddress(address);
});

// Show whether the client is ready or not
client?.events.subscribeToLoaded((e) => {
console.log("Client ready: ", e.args);
});

// Show message payload content when received
client?.events.subscribeToTextMessageReceivedEvent((e) => {
console.log(e.args.payload);
setReceivedMessage(e.args.payload);
});
};


const stop = async () => {
await nym?.client.stop();
};

const send = () => {
if (!nym || !payload || !recipient) return
nym.client.send({ payload, recipient });
}

useEffect(() => {
init();
return () => {
stop();
};
}, []);

if (!nym) return <div>Waiting for the mixnet client...</div>;

if (!selfAddress) return <div>Connecting...</div>;


return (
<div>
<h1>Send messages through the Nym mixnet</h1>
<p style={{ border: "1px solid black" }}>
My self address is: {selfAddress ? selfAddress : "loading"}
</p>
<div style={{ border: "1px solid black" }}>
<label>Recipient Address: </label>
<input
type="text"
onChange={(e) => setRecipient(e.target.value)}
></input>
<input
type="text"
onChange={(e) =>
setPayload({ message: e.target.value, mimeType: "text/plain" })
}
></input>
<button onClick={() => send()}>Send</button>
</div>
<p>Received message: {receivedMessage}</p>
</div>
);
};

export default function App () {
return (
<>
<MixnetClient/>
</>
)
}

以上です!

ーーーーーーーーーーーーーーーーーーーーーーー

Nym Shipyard Level 3の一環として、Developerトラックの参加者がTypeScript SDKを使ったハッカソンに参加します。

開発者の皆さん:ぜひSDKを試してみてください!”Nymify”可能なアプリケーションを確認し、そしてGithub、ソーシャルメディア、コミュニティチャンネルを通じてフィードバックを共有してください。

Join the Nym Community

Discord // Telegram // Element // Twitter

Privacy loves company

English // 中文 // Русский // Türkçe // Tiếng Việt // 日本 // Française // Español // Português // 한국인


原文記事:


この記事が気に入ったらサポートをしてみませんか?