diff --git a/docs/languages/def.js b/docs/languages/def.js index c4f9d8b..5fb77b3 100644 --- a/docs/languages/def.js +++ b/docs/languages/def.js @@ -3,6 +3,7 @@ const enStrings = require("./strings/en.json"); const esStrings = require("./strings/es.json"); const zhStrings = require("./strings/zh.json"); const idStrings = require("./strings/id.json"); +const jaStrings = require("./strings/ja.json"); // Start adding new languages by making a new language object inside the array // display: Name of the language displayed in UI @@ -28,6 +29,12 @@ const languages = [ code: "id", strings: idStrings, }, + { + display: "日本語", + name: "Japanese", + code: "ja", + strings: jaStrings, + }, ]; const i18n_strs = languages.reduce((langs, currentLang) => { diff --git a/docs/languages/strings/ja.json b/docs/languages/strings/ja.json new file mode 100644 index 0000000..c530aae --- /dev/null +++ b/docs/languages/strings/ja.json @@ -0,0 +1,72 @@ +{ + "cookbook-meetup-notification": "クックブックコミュニティミートアップ - 毎週水曜日の午後12時(ET)/ 午後5時(GMT)", + "edit": "編集", + "language": "言語", + "docs": "ドキュメント", + "contributors": "貢献者", + "last-updated": "最終更新", + "featured-contributors": "注目の貢献者", + "featured-contributors-action": "すべての貢献者を見る", + "onboarding-title": "パーマウェブ上で構築する。", + "onboarding-desc": "パーマウェブ上で構築するための開発者ガイドとその他のキュレーションされたコレクション。すべてが一か所に。", + "get-started": "始める", + "first-time": "初めてですか?", + "hello-world": "こんにちは世界", + "hello-world-card-desc": "パーマウェブの始め方", + "hello-world-card-action": "さあ行こう", + "core-concepts": "コアコンセプト", + "core-concepts-card-desc": "開発者のための包括的な構成要素", + "core-concepts-card-action": "始める", + "guides": "ガイド", + "guides-card-desc": "特定の展開を簡単に", + "guides-card-action": "始める", + "contribute": "貢献する", + "contribute-card-desc": "知識を共有する", + "contribute-card-action": "GitHubリポジトリへ行く", + "documentation": "ドキュメンテーション", + "getting-started": "始める", + "getting-started-welcome": "ようこそ", + "getting-started-hw-cli": "こんにちは世界(CLI)", + "getting-started-hw-code": "こんにちは世界(コードあり)", + "getting-started-hw-node": "こんにちは世界(Nodejs)", + "getting-started-contributing": "貢献する", + "concepts": "コアコンセプト", + "concepts-post-transactions": "トランザクションの投稿", + "concepts-tags": "メタデータ(タグ)", + "concepts-querying": "クエリ", + "concepts-fetching-data": "データの取得", + "concepts-transaction-types": "トランザクションの種類", + "concepts-bundles": "バンドル", + "concepts-path-manifests": "パスマニフェスト", + "concepts-wallets-and-keys": "ウォレットとキー", + "concepts-permaweb-applications": "パーマウェブアプリケーション", + "concepts-gateways": "ゲートウェイサービス", + "concepts-bundlers": "バンドリングサービス", + "concepts-atomic-tokens": "アトミックトークン", + "concepts-vouch": "保証", + "guides-arprofile": "ArProfile", + "guides-dns-integration": "DNS統合", + "guides-server-side": "サーバーサイド", + "guides-spheron": "Spheron", + "guides-atomic-token": "アトミックトークン", + "guides-atomic-asset": "アトミックアセット", + "guides-deploying-apps": "アプリの展開", + "guides-github-action": "GitHubアクション", + "guides-deploying-manifests": "パスマニフェストの展開", + "guides-deploying-psts": "PSTの展開", + "guides-execution-machine": "実行マシン", + "guides-sdk-intro": "実行マシンSDK", + "guides-sdk-deploy": "SDKで展開", + "guides-sdk-write": "SDKで書く", + "guides-sdk-read": "SDKで読む", + "guides-search-indexing-service": "検索インデックスサービス", + "guides-intro": "導入", + "guides-warp-deploying-contracts": "コントラクトの展開", + "guides-warp-read-state": "コントラクトの状態を読む", + "guides-warp-write-interactions": "コントラクトの相互作用を書く", + "guides-warp-evolve": "コントラクトを進化させる", + "guides-api-token": "APIトークン", + "guides-testing": "テスト", + "references": "リファレンス", + "kits": "スターターキット" +} \ No newline at end of file diff --git a/docs/src/ja/concepts/README.md b/docs/src/ja/concepts/README.md new file mode 100644 index 0000000..cae6709 --- /dev/null +++ b/docs/src/ja/concepts/README.md @@ -0,0 +1,24 @@ +# コアコンセプト + +ArweaveおよびPermawebの基盤です。 + +- [トランザクションの投稿](post-transactions.md) +- [メタデータ (タグ)](tags.md) +- [クエリ](queryTransactions.md) +- [データの取得](/guides/http-api.md) +- [トランザクションタイプ](bundles.md) + - [バンドル](bundles.md) + - [パスマニフェスト](manifests.md) +- [ウォレットと鍵](keyfiles-and-wallets.md) +- [パーマウェブ](permaweb.md) + - [パーマウェブアプリケーション](permawebApplications.md) + - [ゲートウェイサービス](gateways.md) + - [バンドルサービス](bundlers.md) +- [Arweaveファイルシステム (ArFS)](arfs/arfs.md) + - [データモデル](arfs/data-model.md) + - [エンティティタイプ](arfs/entity-types.md) + - [コンテンツタイプ](arfs/content-types.md) + - [プライバシー](arfs/privacy.md) + - [スキーマ図](arfs/schema-diagrams.md) + +> Permawebのコアコンセプトが不足していると思いますか?[Github](https://github.com/twilson63/permaweb-cookbook/issues)でイシューを作成するか、[貢献することを検討してください](../getting-started/contributing.md)。 \ No newline at end of file diff --git a/docs/src/ja/concepts/arfs/arfs.md b/docs/src/ja/concepts/arfs/arfs.md new file mode 100644 index 0000000..d776eed --- /dev/null +++ b/docs/src/ja/concepts/arfs/arfs.md @@ -0,0 +1,53 @@ +--- +locale: ja +next: "data-model.md" +--- +# ArFSプロトコル:Arweave上の分散型ファイルシステム + +Arweaveファイルシステム、または「ArFS」は、一般的なファイルシステム操作を模倣し、Arweaveのそれ以外は永久的で不変なデータストレージブロックウェーブ上でデータ階層に可変性の側面を提供するために設計されたデータモデリング、ストレージ、および取得プロトコルです。 + +Arweaveの永久的、不変、かつ公開の性質のため、権限、ファイル/フォルダーの名前変更や移動、ファイルの更新などの従来のファイルシステム操作は、単にオンチェーンデータモデルを更新することで行うことはできません。 + +ArFSは、プライバシーと暗号化のパターンを実装し、[Arweaveトランザクションヘッダー](https://docs.arweave.org/developers/server/http-api#transaction-format)内のタグを使用して追加専用のトランザクションデータモデルを定義することで、この問題を解決します。 + +## 主な特徴 + +### ファイル構造 + +ArFSは、階層構造を使用してファイルとフォルダーを整理します。ファイルはArweaveブロックチェーン上の個々のトランザクションとして保存され、フォルダーはこれらのファイルトランザクションを参照するメタデータです。 + +### メタデータ + +各ファイルとフォルダーには、名前、タイプ、サイズ、変更タイムスタンプなどの関連メタデータがあります。ArFSは、標準化された形式でこのメタデータを保存するためにArweaveのタグ付けシステムを活用し、簡単なクエリと整理を可能にします。 + +### ファイル権限 + +ArFSは、パブリックおよびプライベートファイル権限をサポートします。パブリックファイルはネットワーク上の誰でもアクセスできますが、プライベートファイルは所有者の秘密鍵を使用して暗号化されており、所有者のみが内容を復号してアクセスできます。 + +### ファイルのバージョン管理 + +ArFSはファイルのバージョン管理をサポートしており、ユーザーはファイルの複数のバージョンを保存し、いつでも以前のバージョンにアクセスできます。これは、新しいファイルトランザクションをメタデータタグを使用して以前のバージョンにリンクすることで実現されます。 + +### データ重複排除 + +ストレージの冗長性とコストを最小限に抑えるために、ArFSはデータ重複排除技術を採用しています。ユーザーがすでにネットワーク上に存在するファイルを保存しようとした場合、プロトコルは単に既存のファイルへの新しい参照を作成し、重複コピーを保存するのではなく、既存のファイルを参照します。 + +### 検索と発見 + +ArFSは、ファイル名、タイプ、タグなどのメタデータに基づいてファイルを検索および発見する機能を提供します。これは、Arweaveブロックチェーン内に保存されたメタデータをインデックス化することで実現されます。 + +### 相互運用性 + +ArFSは、Arweaveネットワーク上に構築された他の分散型アプリケーションやサービスと相互運用可能になるように設計されています。これにより、さまざまなアプリケーションやユーザー間でシームレスな統合とコラボレーションが可能になります。 + +## 始めるには + +ArFSを使用するには、Arweaveエコシステムに慣れ、ストレージコストをカバーするためのARトークンを取得し、ArFSプロトコルと対話するための互換性のあるクライアントまたはライブラリを選択する必要があります。 + +## リソース + +さらに情報、文書、およびコミュニティサポートについては、以下のリソースを参照してください。 + +- [Arweave公式ウェブサイト](https://www.arweave.org/) +- [Arweave開発者ドキュメント](https://docs.arweave.org/) +- [Arweaveコミュニティフォーラム](https://community.arweave.org/) \ No newline at end of file diff --git a/docs/src/ja/concepts/arfs/content-types.md b/docs/src/ja/concepts/arfs/content-types.md new file mode 100644 index 0000000..6e76db7 --- /dev/null +++ b/docs/src/ja/concepts/arfs/content-types.md @@ -0,0 +1,44 @@ +--- +locale: ja +prev: "entity-types.md" +next: "privacy.md" +--- + +# コンテンツタイプ + +ArFSのすべてのトランザクションタイプは、トランザクションに含まれるデータのContent-Type(MIMEタイプとも呼ばれる)に特定のメタデータタグを利用します。ArFSクライアントは、データのMIMEタイプを決定する必要があります。これにより、Arweaveゲートウェイやブラウザがこのコンテンツを適切にレンダリングできるようになります。 + +すべてのパブリックドライブ、フォルダー、およびファイル(メタデータのみ)エンティティトランザクションはすべてJSON標準を使用するため、次のコンテンツタイプタグを持つ必要があります: + + +```json +Content-Type: '' +``` + +ただし、ファイルのデータトランザクションにはMIMEタイプを決定する必要があります。これは、ファイルの対応するメタデータトランザクションJSONの`dataContentType`に格納されているほか、データトランザクション自体のコンテンツタイプタグにも格納されます。 + +```json +Content-Type: "" +``` + +すべてのプライベートドライブ、フォルダー、およびファイルエンティティトランザクションは、暗号化されているため、次のコンテンツタイプを持つ必要があります: + +```json +Content-Type: '' +``` + +[ArDrive-Core](https://docs.ardrive.io/docs/core-sdk.html)には、ファイルのコンテンツタイプを決定するためのメソッドが含まれています。 + +## その他のタグ + +ArFS対応クライアントは、トランザクションに次のタグを含めて、アプリケーションを識別する必要があります。 + + +```json +App-Name: " + +
エンティティ関係図
+ +ご覧の通り、各ファイルとフォルダーには親フォルダーと親ドライブの両方を指すメタデータが含まれています。ドライブエンティティは自分自身に関するメタデータを含んでいますが、子の内容については含んでいません。したがって、クライアントは最低レベルからドライブの状態を構築し、上に進んでいかなければなりません。 + +## メタデータ形式 + +Arweaveのトランザクションタグに保存されるメタデータは、以下のように定義されます。 + + +```json +{ "name": "Example-Tag", "value": "example-data" } +``` + +トランザクションデータペイロードに保存されるメタデータは、以下のようにJSON形式に従います。 + +```json +{ + "exampleField": "exampleData" +} +``` + +`?`が付くフィールドはオプションです。 + +```json +{ + "name": "My Project", + "description": "This is a sample project.", + "version?": "1.0.0", + "author?": "John Doe" +} +``` + +列挙されたフィールド値(特定の値に従う必要があるもの)は、「値1 | 値2」という形式で定義されます。 + +エンティティIDに使用されるすべてのUUIDは、[ユニバーサリー一意識別子](https://en.wikipedia.org/wiki/Universally_unique_identifier)の標準に基づいています。 + +ArFSタグを特定の順序でリストする必要はありません。 diff --git a/docs/src/ja/concepts/arfs/entity-types.md b/docs/src/ja/concepts/arfs/entity-types.md new file mode 100644 index 0000000..1efe007 --- /dev/null +++ b/docs/src/ja/concepts/arfs/entity-types.md @@ -0,0 +1,252 @@ +--- +locale: ja +prev: "data-model.md" +next: "content-types.md" +--- + +# エンティティタイプ + +## 概要 + +Arweaveのトランザクションは、トランザクションヘッダーとデータペイロードで構成されています。 + +したがって、ArFSエンティティは、トランザクションヘッダーのタグとして保存されるデータと、トランザクションのデータとしてエンコードされて保存されるデータに分かれています。プライベートエンティティの場合、JSONデータとファイルデータペイロードは常に以下で定義されたプロトコルプロセスに従って暗号化されます。 + +- ドライブエンティティは、標準のドライブタグとセカンダリメタデータをエンコードした単一のメタデータトランザクションを必要とします。 +- フォルダーエンティティは、標準のフォルダータグとセカンダリメタデータをエンコードした単一のメタデータトランザクションを必要とします。 +- ファイルエンティティは、標準のファイルタグとファイルに関連するセカンダリメタデータをエンコードしたメタデータトランザクションを必要とします。 +- ファイルエンティティには、限られたセットのファイルタグと実際のファイルデータ自体を含む別のデータトランザクションも必要です。 +- スナップショットエンティティは、ドライブのすべての集約されたArFSメタデータとスナップショットを識別する標準スナップショットGQLタグを含むデータJSONを含む単一のトランザクションを必要とします。 + +## ドライブ + +ドライブは、フォルダーとファイルの論理的な最上位グループです。すべてのフォルダーとファイルはドライブの一部である必要があり、そのドライブのドライブIDを参照します。 + +ドライブを作成する際には、対応するフォルダーも作成する必要があります。これがドライブのルートフォルダーとして機能します。ドライブとフォルダーエンティティのこの分離により、フォルダービュークエリ、リネーミング、リンク作成などの機能が可能になります。 + + +```json +ArFS: "0.13" +Cipher?: "AES256-GCM" +Cipher-IV?: "<12 byte initialization vector as Base64>" +Content-Type: "" +Drive-Id: "" +Drive-Privacy: "" +Drive-Auth-Mode?: "password" +Entity-Type: "drive" +Unix-Time: "" + +Data JSON { + "name": "", + "rootFolderId": "" +} +``` + +
ドライブエンティティトランザクションの例
+ +## フォルダー + +フォルダーは、他のフォルダーとファイルの論理的なグループです。親フォルダーIDがないフォルダーエンティティのメタデータトランザクションは、それに対応するドライブのルートフォルダーと見なされます。他のすべてのフォルダーエンティティは、親フォルダーIDを持っている必要があります。フォルダーは基礎データを持たないため、フォルダーデータトランザクションは必要ありません。 + +```json +ArFS: "0.13" +Cipher?: "AES256-GCM" +Cipher-IV?: "<12 byte initialization vector as Base64>" +Content-Type: "" +Drive-Id: "" +Entity-Type: "folder" +Folder-Id: "" +Parent-Folder-Id?: "" +Unix-Time: "" + +Data JSON { + "name": "" +} +``` + +
フォルダーエンティティトランザクションの例
+ +## ファイル + +ファイルには、写真、ドキュメント、映画などのアップロードデータが含まれます。 + +Arweaveファイルシステムでは、単一のファイルは2つの部分に分割されます - メタデータとデータです。 + +Arweaveファイルシステムでは、単一のファイルは2つの部分に分割されます - メタデータとデータです。 + +ファイルエンティティメタデータトランザクションには、実際のファイルデータは含まれていません。代わりに、ファイルデータはファイルデータトランザクションと呼ばれる別のトランザクションとしてアップロードされる必要があります。ファイルのJSONメタデータトランザクションには、実際のデータを取得するためのファイルデータトランザクションIDへの参照が含まれています。この分離により、ファイルのメタデータを更新する際にファイル自体を再アップロードする必要がなくなります。また、プライベートファイルはそのJSONメタデータトランザクションを暗号化できるため、権限のない人がファイルやメタデータを見ることができないことが保証されます。 + + +```json +ArFS: "0.13" +Cipher?: "AES256-GCM" +Cipher-IV?: "<12 byte initialization vector as Base64>" +Content-Type: "" +Drive-Id: "" +Entity-Type: "file" +File-Id: "" +Parent-Folder-Id: "" +Unix-Time: "" + +Data JSON { + "name": "", + "size": "", + "lastModifiedDate": "", + "dataTxId": "", + "dataContentType": "", + "pinnedDataOwner": "" # Optional +} +``` + +
ピンファイル
+ +バージョンv0.13以降、ArFSはピンをサポートしています。ピンは、Arweaveにアップロードされた任意のトランザクションのデータであり、そのトランザクションはピンを作成したウォレットが所有しているかもしれませんし、そうでないかもしれません。 + +新しいファイルピンが作成されると、作成されるトランザクションはメタデータトランザクションだけです。`dataTxId`フィールドは、Arweaveの任意のトランザクションを指し、オプションの`pinnedDataOwner`フィールドには、元のデータトランザクションの所有者であるウォレットのアドレスが保持されます。 + + +
ファイルデータトランザクションの例
+ +ファイルデータトランザクションには、ファイルに関する限られた情報が含まれます。例えば、復号化に必要な情報や、ブラウザで表示するために必要なContent-Type(mime-type)などです。 + +```json +Cipher?: "AES256-GCM" +Cipher-IV?: "<12 byte initialization vector as Base64>" +Content-Type: "" + { File Data - Encrypted if private } +``` + +
ファイルメタデータトランザクションの例
+ +ファイルメタデータトランザクションには、ドライブとフォルダー内でファイルを特定するために必要なGQLタグが含まれています。 + +そのデータには、ファイルのJSONメタデータが含まれます。これには、ファイル名、サイズ、最終更新日、データトランザクションID、データコンテンツタイプが含まれます。 + +```json +ArFS: "0.13" +Cipher?: "AES256-GCM" +Cipher-IV?: "<12 byte initialization vector as Base64>" +Content-Type: "" +Drive-Id: "" +Entity-Type: "file" +File-Id: "" +Parent-Folder-Id: "" +Unix-Time: "" + { File JSON Metadata - Encrypted if private } +``` + +## スナップショット + +ArFSアプリケーションは、ユーザーの特定の `Drive-Id` に関連するすべてのArFSトランザクションを照会することで、ドライブの最新の状態を生成します。これには、GQLを介したインデックス化されたArFSデータのページクエリと、各ArFSトランザクションのArFS JSONメタデータエントリの両方が含まれます。 + +小さなドライブ(ファイル数が1000未満)の場合、非常に小さなデータの数千リクエストを比較的迅速かつ信頼性高く達成できます。しかし、より大きなドライブの場合、ローカルデータベースキャッシュが空のときにすべてのArFSメタデータを取得するために長い同期時間がかかります。これにより、ArWeave Gatewayの遅延に関連するレート制限が発生する可能性もあります。 + +ドライブの状態が完全かつ正確に生成されたら、それを単一のスナップショットにまとめ、Arweaveトランザクションとしてアップロードできます。ArFSクライアントはGQLを使用してこのスナップショットを見つけて取得し、ドライブの総状態またはその大部分を迅速に再構成できます。その後、スナップショットの後に行われた個々のトランザクションを照会できます。 + +このオプションの方法は、スナップショットデータをアップロードするコストがかかるものの、ドライブ状態を構築する際の便利さとリソース効率を提供します。この方法を使用すると、クライアントはドライブで実行されたすべてのトランザクションの代わりに、数回のスナップショットを反復するだけで済みます。 + +### スナップショットエンティティタグ + +スナップショットエンティティには、次のタグが必要です。これらはArFSクライアントによって照会され、ドライブスナップショットを見つけ、他のトランザクションと組織し、ドライブの最新の状態を構築するために使用されます。 + +```json +ArFS: "0.13" +Drive-Id: "" +Entity-Type: "snapshot" +Snapshot-Id: "" +Content-Type: "" +Block-Start: "" +Block-End: "" +Data-Start: "" +``` + +
Snapshot Transaction GQL tags example
+ +### スナップショットエンティティデータ + +各ArFSスナップショットエンティティに対して、JSONデータオブジェクトもアップロードする必要があります。このデータには、関連するドライブ内のすべてのArFSドライブ、フォルダー、ファイルメタデータの変更と、以前のスナップショットが含まれます。スナップショットデータには、`txSnapshots`という配列が含まれています。各アイテムには、スナップショットの開始および終了期間内の関連ドライブに対して行われた各トランザクションのGQLおよびArFSメタデータの詳細が含まれます。 + +`tsSnapshot`には、Arweave Gatewayから返されるのと同じGQLタグインターフェースを使用する`gqlNode`オブジェクトが含まれています。これには、ArFSクライアントに必要な重要な`block`、`owner`、`tags`、および`bundledIn`情報がすべて含まれています。また、そのArFSエンティティに関連するデータJSONを保存する`dataJson`オブジェクトも含まれています。 + +プライベートドライブの場合、`dataJson`オブジェクトには、関連するファイルまたはフォルダーのJSON文字列エスケープされた暗号化テキストが含まれています。この暗号化テキストは、ファイルの既存の`Cipher`と`Cipher-IV`を使用します。これにより、クライアントは既存のArFSプライバシープロトコルを使用して、この情報を迅速に復号化できることが保証されます。 + +```json +{ + "txSnapshots": [ + { + "gqlNode": { + "id": "bWCvIc3cOzwVgquD349HUVsn5Dd1_GIri8Dglok41Vg", + "owner": { + "address": "hlWRbyJ6WUoErm3b0wqVgd1l3LTgaQeLBhB36v2HxgY" + }, + "bundledIn": { + "id": "39n5evzP1Ip9MhGytuFm7F3TDaozwHuVUbS55My-MBk" + }, + "block": { + "height": 1062005, + "timestamp": 1669053791 + }, + "tags": [ + { + "name": "Content-Type", + "value": "application/json" + }, + { + "name": "ArFS", + "value": "0.11" + }, + { + "name": "Entity-Type", + "value": "drive" + }, + { + "name": "Drive-Id", + "value": "f27abc4b-ed6f-4108-a9f5-e545fc4ff55b" + }, + { + "name": "Drive-Privacy", + "value": "public" + }, + { + "name": "App-Name", + "value": "ArDrive-App" + }, + { + "name": "App-Platform", + "value": "Web" + }, + { + "name": "App-Version", + "value": "1.39.0" + }, + { + "name": "Unix-Time", + "value": "1669053323" + } + ] + }, + "dataJson": "{\"name\":\"november\",\"rootFolderId\":\"71dfc1cb-5368-4323-972a-e9dd0b1c63a0\"}" + } + ] +} +``` + +
Snapshot Transaction JSON data example
+ + + +## スキーマダイアグラム + +以下のダイアグラムは、ドライブ、フォルダー、およびファイルエンティティのスキーマの完全な例を示しています。 + +### パブリックドライブ + + +
パブリックドライブスキーマ
+ +### プライベートドライブ + + +
プライベートドライブスキーマ
\ No newline at end of file diff --git a/docs/src/ja/concepts/arfs/privacy.md b/docs/src/ja/concepts/arfs/privacy.md new file mode 100644 index 0000000..81768f5 --- /dev/null +++ b/docs/src/ja/concepts/arfs/privacy.md @@ -0,0 +1,76 @@ +--- +locale: ja +prev: "content-types.md" +next: "schema-diagrams.md" +--- + +# プライバシー + +Arweaveのブロックウィーブは本質的に公開されています。しかし、ArFSのようなアプリケーションを使用することで、ユーザーのプライベートデータは軍用レベルの([量子耐性](https://blog.boot.dev/cryptography/is-aes-256-quantum-resistant/#:~:text=Symmetric%20encryption%2C%20or%20more%20specifically,key%20sizes%20are%20large%20enough))暗号化を用いてコンピュータから外部に出ることはありません。このプライバシーレイヤーはドライブレベルで適用され、ユーザーはドライブを最初に作成する際にそれがパブリックかプライベートかを決定します。プライベートドライブはArFSプライバシーモデルに従う必要があります。 + +プライベートドライブ内のすべてのファイルは、[AES-256-GCM](https://iopscience.iop.org/article/10.1088/1742-6596/1019/1/012008/pdf)を使用して対称的に暗号化されます。各プライベートドライブには「ドライブキー」と呼ばれるマスターキーがあり、これはユーザーのArweaveウォレット署名、ユーザー定義のドライブパスワード、および一意のドライブ識別子([uuidv4](https://en.wikipedia.org/wiki/Universally_unique_identifier))を組み合わせたものです。各ファイルにはその「ドライブキー」から派生した独自の「ファイルキー」があります。これにより、他のファイルへのアクセスを公開せずに、単一のファイルを共有することができます。 + +ファイルが暗号化され、Arweaveに保存されると、それは永遠にロックされ、そのファイルキーを使用してのみ復号化できます。 + +## キーの派生 + +プライベートドライブには、暗号化用のグローバルドライブキー `D` と複数のファイルキー `F` があります。これにより、ドライブには必要なだけ多くのユニークに暗号化されたファイルを持つことができます。1つのキーは、単一のファイルのすべてのバージョンに使用されます(新しいファイルバージョンは同じFile-Idを使用します)。 + +`D` はドライブとフォルダーのメタデータを暗号化するために使用され、`F` はファイルのメタデータと実際の保存データを暗号化するために使用されます。これにより、ユーザーは特定のファイルを共有することができ、ドライブ全体の内容を明らかにすることなく利用できます。 + +`D` は、ドライブのIDとユーザーが提供するパスワードのRSA-PSS署名を使用してHKDF-SHA256で派生します。 + +`F` もHKDF-SHA256を使用してドライブキーとファイルのIDから派生します。 + + + +他のウォレット([ArConnect](https://www.arconnect.io/)など)は、このキー派生プロトコルに統合されており、ドライブキーを得るために必要なSHA-256署名を取得するために指定されたArweaveウォレットから署名を収集するAPIを公開しています。 + +Dartを使用した実装の例は[こちら](https://github.com/ardriveapp/ardrive-web/blob/187b3fb30808bda452123c2b18931c898df6a3fb/docs/private_drive_kdf_reference.dart)で入手でき、Typescriptの実装は[こちら](https://github.com/ardriveapp/ardrive-core-js/blob/f19da30efd30a4370be53c9b07834eae764f8535/src/utils/crypto.ts)にあります。 + +## プライベートドライブ + +ドライブはパブリックまたはプライベートデータを保存できます。これはドライブエンティティメタデータの `Drive-Privacy` タグによって示されます。 + + +```json +Drive-Privacy: "" +``` + +ドライブエンティティがプライベートである場合、追加のタグ `Drive-Auth-Mode` も使用して、ドライブキーの派生方法を示す必要があります。ArDriveクライアントは現在、安全なパスワードとArweaveウォレットのプライベートキー署名を使用してグローバルドライブキーを派生させています。 + +```json +Drive-Auth-Mode?: 'password' +``` + +すべての暗号化されたドライブエンティティには、データを復号化するための公開パラメータとともに `Cipher` タグが指定される必要があります。これは、パラメータを `Cipher-*` タグで指定することで行われます。例えば `Cipher-IV`です。パラメータがバイトデータの場合、タグ内ではBase64でエンコードする必要があります。 + +ArDriveクライアントは、すべての対称暗号化にAES256-GCMを利用しており、これには12バイトのランダムなデータからなるCipher Initialization Vectorが必要です。 + +```json +Cipher?: "AES256-GCM" +Cipher-IV?: "<12 byte initialization vector as Base64>" +``` + +さらに、すべての暗号化されたトランザクションは、メタデータとデータトランザクションの両方で `Content-Type` タグを `application/octet-stream` に設定する必要があります。 + +プライベートドライブエンティティとそれに対応するルートフォルダーエンティティは、トランザクションに含まれるJSONファイルを対称的に暗号化するために生成されたこれらのキーと暗号を使用します。これにより、ドライブの所有者(およびキーが共有された者)のみがドライブを開き、ルートフォルダーを発見し、ドライブ内の残りの子要素を読み込むことができます。 + +## プライベートファイル + +プライベートドライブにファイルがアップロードされると、それもデフォルトでプライベートになり、その親ドライブと同じドライブキーを利用します。ドライブ内の各ユニークなファイルには、そのファイルのユニークな `FileId` に基づいた独自のファイルキーのセットが与えられます。単一のファイルが新しいバージョンを取得すると、その `File-Id` は再利用され、そのファイルの履歴内のすべてのバージョンに同じファイルキーを効果的に利用します。 + +これらのファイルキーは、ドライブの所有者が必要に応じて共有できます。 + +プライベートファイルエンティティは、メタデータおよびデータトランザクションの両方が同じファイルキーを使用して暗号化されており、データのすべての側面が本当にプライベートであることを保証します。そのため、ファイルのメタデータとデータトランザクションの両方には、一意の `Cipher-IV` と `Cipher` タグが必要です。 + +```json +Cipher?: "AES256-GCM" +Cipher-IV?: "<12 byte initialization vector as Base64>" +``` + +ドライブと同様に、プライベートファイルはメタデータおよびデータトランザクションの両方で `Content-Type` タグを `application/octet-stream` に設定する必要があります。 + +```json +Content-Type: "application/octet-stream" +``` \ No newline at end of file diff --git a/docs/src/ja/concepts/arfs/schema-diagrams.md b/docs/src/ja/concepts/arfs/schema-diagrams.md new file mode 100644 index 0000000..52936b6 --- /dev/null +++ b/docs/src/ja/concepts/arfs/schema-diagrams.md @@ -0,0 +1,18 @@ +--- +locale: ja +prev: "privacy.md" +--- + +## スキーマ図 + +以下の図は、ドライブ、フォルダー、ファイルエンティティスキーマの完全な例を示しています。 + +### パブリックドライブ + +
パブリックドライブスキーマ
+ +### プライベートドライブ + +
プライベートドライブスキーマ
+ +Arweave GQLタグのバイト制限は `2048` に制限されています。データJSONカスタムメタデータの制限は決まっていませんが、データが多いほどアップロードコストが高くなります。 \ No newline at end of file diff --git a/docs/src/ja/concepts/arns.md b/docs/src/ja/concepts/arns.md new file mode 100644 index 0000000..5ca4d31 --- /dev/null +++ b/docs/src/ja/concepts/arns.md @@ -0,0 +1,64 @@ +--- +locale: ja +--- +# ArNS - Arweave Name System + +## 概要 +Arweave Name System (ArNS) は、PermaWeb の電話帳です。 + +これは、AR.IO ゲートウェイによって有効化され、ユーザーが親しみやすい名前を PermaWeb アプリ、ページ、およびデータに接続するために使用される分散型かつ検閲耐性のある命名システムです。 + +このシステムは、ユーザーがレジストリで名前を購入し、DNS 名前サーバーがこれらの名前を IP アドレスに解決する従来の DNS と似ています。 + +ArNS では、レジストリが分散型で永久的であり、Arweave に保存され、各 AR.IO ゲートウェイがキャッシュおよび名前解決者として機能します。ユーザーは、"my-name" のような名前を ArNS レジストリに登録し、任意の Arweave トランザクション ID へのポインタを設定できます。AR.IO ゲートウェイは、その名前を自身のサブドメインの一部として解決し、たとえば `https://laserilla.arweave.net` のように、関連する Arweave トランザクション ID へのすべてのリクエストをプロキシします。登録された各名前は、Arweave トランザクション ID を指す関連するサブ名前を持つこともでき、例えば `https://v1_laserilla.arweave.net` のように、所有者にさらなる柔軟性と制御を提供します。 + +## ArNS レジストリ + +ArNS は、スマートウィーブプロトコルを使用してその名前レコードを管理します。各レコードまたは名前は、ユーザーによってリースされ、ANT トークンに紐づけられています。1つの ANT に複数の ArNS 名前を登録することはできますが、1つの ArNS 名前に複数の ANT を登録することはできません - ゲートウェイはルーティング ID の指し示す場所を知ることができません。 + +ArNS 名は、0-9 の数字、a-z の文字、およびダッシュ [-] を含む最大 32 文字です。ダッシュは末尾に置くことはできません。例えば `-myname` は無効です。 + +## ANTs (Arweave Name Tokens) + +ANT は ArNS エコシステムの重要な部分です - それは ArNS 名前を所有するための実際の鍵です。ArNS 名前を ANT に登録すると、その ANT はその名前の転送方法になります。ArNS レジストリは ANT の所有者が誰であるかを気にせず、単にどの名前に属する ANT であるかを知っています。 + +ANT 内では、ArNS レジストリによって承認されたソースコードトランザクションリストの範囲内で、任意の機能を構築できます。NFT、PST、DAO、または完全なアプリケーションを含むまでです。 + +## アンダーネーム + +アンダーネームは、あなたの ANT (Arweave Name Token) によって保持および管理されるレコードです。これらのレコードは、ArNS 名前を所有していなくても作成および管理でき、ANT を新しい所有者に送信する際に一緒に転送されます。同様に、あなたの ArNS 名前が期限切れになった場合、ANT を新しい ArNS 名前に登録すると、すべてのアンダーネームはそのまま残ります。 + +例: あなたは `oldName.arweave.net` を所有しています。 + +その後: あなたはアンダーネーム "my" を作成します - `my_oldName.arweave.net`。 + +その後: `oldName.arweave.net` が期限切れになり、あなたは ANT に `newName.arweave.net` を登録します。 + +今: アンダーネーム `my` は `newName` 上でアクセス可能です - `my_newName.arweave.net`。 + +以下は ANT コントラクトの状態の例です: + + +```json +{ + balances:{ QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ : 1 }, + controller: "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ", + evolve: null, + name: "ArDrive OG Logo", + owner: "QGWqtJdLLgm2ehFWiiPzMaoFLD50CnGuzZIPEdoDRGQ", + records:{ + @:{ transactionId: "xWQ7UmbP0ZHDY7OLCxJsuPCN3wSUk0jCTJvOG1etCRo" }, + undername1:{ transactionId: "usOLUmbP0ZHDY7OLCxJsuPCN3wSUk0jkdlvOG1etCRo" } + }, + ticker:"ANT-ARDRIVE-OG-LOGO" +} +``` +ベースの "@" レコードは ANT の初期ルーティング ID です。もしこの ANT に 'my-name' を登録し、`my-name.arweave.net` 経由でアクセスしようとすると、@ レコードの `transactionId` にリダイレクトされます。 + +もし `undername1_my-name.arweave.net` にアクセスしようとすると、`undername1` の `transactionId` が得られます。 + +ANT には理論上、無制限のアンダーネームがあります。ただし、どれだけ提供されるかは、使用される ArNS 名前のティアによります。 + +## リソース +# [ArNS アプリ](https://arns.app/) +# [ArNS ドキュメント](https://docs.ar.io/arns/) \ No newline at end of file diff --git a/docs/src/ja/concepts/atomic-tokens.md b/docs/src/ja/concepts/atomic-tokens.md new file mode 100644 index 0000000..c1047ff --- /dev/null +++ b/docs/src/ja/concepts/atomic-tokens.md @@ -0,0 +1,30 @@ +--- +locale: ja +--- +# アトミックトークンの概念と原則 + +![https://arweave.net/bcHI0TW_nH-iTfZnobD9Wt6d0Qe6thWfPrGhnvi1m1A](https://arweave.net/bcHI0TW_nH-iTfZnobD9Wt6d0Qe6thWfPrGhnvi1m1A) + +アトミックトークンは、データおよびパーマウェブ上の SmartWeave コントラクトを参照する単一の永続的な識別子です。 + +## 仕様 + +データは必ず arweave ネットワークに保存され、トランザクション識別子で参照可能でなければなりません。 + +コントラクトは、アトミックトークンの所有権を表す `balances` オブジェクトを実装しなければなりません。 + +コントラクトは、以下の引数を取る `transfer` 関数を実装しなければなりません: +- target {WalletAddress または Contract} +- qty {Number} + +> transfer 関数は、呼び出し元からターゲットへ所有権を移転する必要があります。 + +## オプション + +_これらはアトミックトークンをパーマウェブ上で発見可能かつ取引可能にするための実装オプションです。_ + +[Verto Flex](https://github.com/useverto/flex) - Flexライブラリを使用することで、アトミックトークンを信頼することなく売買できます。 + +[発見可能性タグ - ANS 110](https://github.com/ArweaveTeam/arweave-standards/blob/master/ans/ANS-110.md) - これらの追加タグは、パーマウェブアプリケーションやサービスがトークンを発見するのに役立ちます。 + +[ガイドをチェック](../guides/atomic-tokens/intro.md) \ No newline at end of file diff --git a/docs/src/ja/concepts/bundlers.md b/docs/src/ja/concepts/bundlers.md new file mode 100644 index 0000000..2fd7f98 --- /dev/null +++ b/docs/src/ja/concepts/bundlers.md @@ -0,0 +1,34 @@ +--- +locale: ja +--- +# バンドリングサービス + +--- + +バンドリングサービスを利用すると、ユーザーはデータトランザクションをバンドリングサービスに投稿し、他のユーザーのトランザクションと一緒に「バンドル」して、次回のArweaveブロックに1つのArweaveトランザクションとして投稿されるようにできます。 + +--- + +### バンドルとは? + +--- + +トランザクションバンドルとその利点の説明は、[こちら](/concepts/bundles.md)で確認できます。 + +### バンドラーノードとは? + +--- + +バンドラーとは、ユーザーからトランザクションやデータアイテムを受け取り、それらをバンドルし、Arweaveネットワークに投稿する責任を持つノードです(特定のトランザクションIDでアップロードされることを保証します)。 + +サービス: + +- [Turbo](https://github.com/ardriveapp/turbo-upload-service/) + +データがArweaveにアップロードされるまで持続されることを保証します。 + +### 複数通貨のサポート + +--- + +バンドリングサービスの重要な機能は、ARトークンを使用して投稿される基本的なArweaveトランザクションの支払いを行うため、さまざまなトークンでのストレージ料金の支払いを有効にできることです。これは、他のチェーンがユーザーのためにArweaveの永続的なストレージを有効にするための主な入り口です。 \ No newline at end of file diff --git a/docs/src/ja/concepts/bundles.md b/docs/src/ja/concepts/bundles.md new file mode 100644 index 0000000..b61c22d --- /dev/null +++ b/docs/src/ja/concepts/bundles.md @@ -0,0 +1,50 @@ +--- +locale: ja +--- +# トランザクションバンドル + +### バンドルとは? + +--- + +トランザクションバンドルは、特別な種類のArweaveトランザクションです。これにより、他の複数のトランザクションやデータアイテムをその中にバンドルすることができます。トランザクションバンドルには多くのネストされたトランザクションが含まれているため、Arweaveが1秒あたり数千のトランザクションにスケールする能力の鍵となっています。 + +ユーザーは、[turbo](https://ardrive.io/turbo-bundler/)などのバンドリングサービスにトランザクションを提出し、それを他のトランザクションと一緒に「バンドル」にまとめ、ネットワークに投稿します。 + +### バンドルはArweaveにどのように役立つのか? + +--- + +#### 可用性 + +バンドリングサービスは、バンドルされたトランザクションが信頼性高くArweaveに投稿され、落ちることがないことを保証します。 + +バンドルされたトランザクションのトランザクションIDは即座に利用可能となり、データはすでにArweaveネットワーク上にあるかのように瞬時にアクセスできます。 + +#### 信頼性 + +投稿されたトランザクションは、ネットワークの高い活動などの理由で確認に失敗することがあります(トランザクションが落ちる結果になります)。このような場合、トランザクションは**孤立**することがあります。つまり、メモリプールに詰まって最終的に削除されることです。 + +バンドラーは、バンドルされたデータをArweaveに投稿し続けることによってこの問題を解決し、失敗したりメモリプールに詰まったりしないことを保証します。 + +#### スケーラビリティ + +バンドルは最大で2256のトランザクションを格納でき、各トランザクションはArweave上で単一のトランザクションとして決済されます。これにより、Arweaveのブロックスペースはほぼすべてのユースケースをサポートするためにスケールします。 + +### ネストされたバンドルとは? + +--- + +バンドルには、Arweaveにアップロードするためのデータアイテムを含めることができ、これらのデータアイテムもまたバンドルであることができます。 + +つまり、バンドルのバンドルをアップロードすることが可能であり、言い換えれば**ネストされたバンドル**です。 + +ネストされたバンドルにはネストの深さに理論的な制限がないため、トランザクションスループットを大幅に増加させることができます。 + +ネストされたバンドルは、Arweaveに確実に到達させたい異なるグループのバンドルデータがある場合に便利かもしれません。 + +出典とさらなる読み物: + +[Ardrive Turbo](https://ardrive.io/turbo-bundler/) + +[ANS-104標準](https://github.com/ArweaveTeam/arweave-standards/blob/master/ans/ANS-104.md) \ No newline at end of file diff --git a/docs/src/ja/concepts/gateways.md b/docs/src/ja/concepts/gateways.md new file mode 100644 index 0000000..a268a29 --- /dev/null +++ b/docs/src/ja/concepts/gateways.md @@ -0,0 +1,38 @@ +--- +locale: ja +--- +# ゲートウェイ + +--- + +Arweaveネットワーク(または[パーマウェブ](https://cookbook.arweave.dev/concepts/permaweb.html))にアップロードされたデータは、常にすぐに操作しやすいわけではありません。 + +### ゲートウェイとは? + +ゲートウェイは時々「パーマウェブのフロントドア」と呼ばれます。これらはArweaveとエンドユーザーの間のインターフェースとして機能し、Webブラウザからデータにアクセスしたり、パーマウェブアプリケーションを利用したりすることを容易にします。 + +例えば、Arweaveに保存されたHTMLファイルにアクセスすると、それはブラウザでウェブページとして表示されます。同様に、画像の表示、ファイルのダウンロード、JSONデータの表示、またはArweaveに保存されたその他のファイルを扱うことも可能です。これにより、パーマウェブとのインタラクションは従来のWebを使用するのと非常に似ています。 + +### ゲートウェイのその他の役割 + +ユーザーがアクセスできるデータを提供するだけでなく、ゲートウェイは以下のような他のサービスも提供します: + +- 頻繁にアクセスされるデータやトランザクションのキャッシュ +- トランザクションのインデックス作成およびクエリ(ArweaveタグおよびGraphQlインターフェースを通じて) +- Arweaveネットワーク全体へのトランザクションのシーディング +- コンテンツのモデレーション(どのデータが提供されるかを選択するためのコンテンツポリシー) + +### ゲートウェイとArweaveプロトコル + +ゲートウェイはArweave上のコンテンツにアクセスするのを可能にする大きな役割を果たしますが、彼らは**コアプロトコル**の一部ではありません。 + +これは、ゲートウェイのホスティングと運用がArweaveネットワークを保護するノードの運用とは別であることを意味します(ただし、これらはしばしば一緒に行われます)。 + +ゲートウェイはコアプロトコルの一部ではないため、マイニングに対する報酬やインセンティブのような組み込みのインセンティブ構造はありません。これにより、ゲートウェイオペレーターや外部サービスは、インセンティブシステムの構築方法を選択できるようになり、より分散化された民主的なモデルが生まれます。個々のアプリケーションは、パーマウェブアプリケーションのキャッシングとパフォーマンスを向上させるために独自のゲートウェイを運営することもできます。 + +人気のあるゲートウェイには、Arweaveチームによって運営されている[arweave.net](https://arweave.net/)や、[arweave.world](https://cookbook.arweave.world/)、[arweave.asia](https://cookbook.arweave.asia)、[arweave.live](https://arweave.live/) 、および[g8way.io](https://g8way.io)などがあります。ただし、[AR.IO](https://ar.io/)のようなチームによって、ゲートウェイの運用はより簡単でアクセス可能になっています。 + +### 出典とさらなる読み物 + +- [ArWiki](https://arwiki.wiki/#/en/gateways) +- [AR.IO](https://ar.io/) \ No newline at end of file diff --git a/docs/src/ja/concepts/keyfiles-and-wallets.md b/docs/src/ja/concepts/keyfiles-and-wallets.md new file mode 100644 index 0000000..b38e8e6 --- /dev/null +++ b/docs/src/ja/concepts/keyfiles-and-wallets.md @@ -0,0 +1,60 @@ +--- +locale: ja +--- +# ウォレットとキー + +--- + +### Arweaveウォレット + +Arweaveでは、ウォレットがブロックチェーン上のユニークなアドレスを保護します。このアドレスは、$AR残高を追跡し、Arweaveネットワークとやり取りするために使用されます(トランザクションの送信や[SmartWeave Contracts](../guides/smartweave/warp/intro.md)との相互作用など)。 + +ほとんどのブロックチェーンと同様に、Arweaveにおけるウォレットの概念はやや誤解を招くものです。 + +ウォレット自体はトークンを「保持」しているわけではありません。トークン残高はブロックチェーン上に保存され、ウォレットのアドレスにリンクされています。代わりに、ウォレットはトランザクションに署名してデータを投稿したりトークンを転送したりするために使用できる暗号学的な公開鍵-秘密鍵ペアを保持します。ウォレットの所有者(ウォレットの**秘密鍵**にアクセスできる人)だけが、そのアドレスのトランザクションに署名し、資金にアクセスできます。 + +### キーペアとウォレット形式 + +Arweaveは、*4096ビット*のRSA-PSSキーペアを使用し、JWK(JSON Web Keys)形式で保存します。JWK形式は、RSAキーペアだけでなく、多くの種類の暗号鍵を保存するために使用できます。 + +以下に、RSA-PSSキーペアを説明するJWKファイルの内容を示します。値は省略されていますので、オンチェイントランザクションの送信者または受信者として誤って使用されることはありません。RSA-PSSキーペアを保存する際、JWKの`n`に関連付けられた値があなたのウォレットの**公開鍵**であり、ウォレットのセキュリティを損なうことなく安全に共有できます。 + +```json +{ + "d": "cgeeu66FlfX9wVgZr5AXKlw4MxTlxSuSwMtTR7mqcnoE...", + "dp": "DezP9yvB13s9edjhYz6Dl...", + "dq": "SzAT5DbV7eYOZbBkkh20D...", + "e": "AQAB", + "ext": true, + "kty": "RSA", + "n": "o4FU6y61V1cBLChYgF9O37S4ftUy4newYWLApz4CXlK8...", + "p": "5ht9nFGnpfW76CPW9IEFlw...", + "q": "tedJwzjrsrvk7o1-KELQxw...", + "qi": "zhL9fXSPljaVZ0WYhFGPU..." +} +``` + +あなたの**秘密鍵**もJWKに保存されており、主に`d`に関連付けられた値の下にありますが、JWKの他の値からも部分的に導出されます。**秘密鍵**は、ウォレットのパスワードのようなもので、デジタル署名を作成するため(例えば、トランザクションの署名)やデータを復号化するために使用できます。 + +これらのJWKは、[Arweave.app](https://arweave.app)などのウォレットアプリから作成されエクスポートされた実際の`json`ファイルです。または、[arweave-js](https://github.com/ArweaveTeam/arweave-js)を使用してコードから生成されます。 + +ウォレットアプリを使用してキーペアを生成する際、あなたの**秘密鍵**は、場合によってはトランザクションの署名やウォレットの復元の代替として使用できるニーモニック**シードフレーズ**としても表現されます。 + +### ウォレットの安全性 + +あなたの**秘密鍵**は常に機密として保持する必要があります。なぜなら、それにはあなたのアドレスから他の人のアドレスにトークンを転送する能力があるからです。開発者としては、公共のGitHubリポジトリにキーファイルを含めたり、他の公共の場所にホストしたりしないようにしてください。 + +### ウォレットアドレス + +興味深いことに、ウォレットのアドレスはその**公開鍵**から導出されます。**公開鍵**を他の人と共有することは安全ですが、*4096ビット*の**公開鍵**は便利に渡すには大きすぎます。そのオーバーヘッドを減らし、ウォレットアドレスをもう少し人間に読みやすくするために、**公開鍵**の`SHA-256`ハッシュを`Base64URL`エンコードしてウォレットアドレスとして使用します。このセキュリティにより、ユニークな43文字のウォレットアドレスがウォレットの**公開鍵**に決定的にリンクされ、**公開鍵**を持つ誰でも確認できる便利な省略形が提供されます。 + +### ウォレット + +[Arweave.app](https://arweave.app/welcome) - 永続データを展開し、分散型アプリケーションに安全に接続し、ウィーブをナビゲートするためのArweaveウェブウォレット。 + +[ArConnect](https://www.arconnect.io/) - Arweaveウォレットブラウザ拡張機能。 + +### 出典とさらなる読み物: +[Arweave Docs](https://docs.arweave.org/developers/server/http-api#key-format) + +[JSON Web Key Format (RFC 7517)](https://www.rfc-editor.org/rfc/rfc7517) \ No newline at end of file diff --git a/docs/src/ja/concepts/manifests.md b/docs/src/ja/concepts/manifests.md new file mode 100644 index 0000000..d7848f1 --- /dev/null +++ b/docs/src/ja/concepts/manifests.md @@ -0,0 +1,88 @@ +--- +locale: ja +--- +# パスマニフェスト + +## 概要 + +ファイルをArweaveにアップロードすると、各ファイルには独自のトランザクションIDが割り当てられます。デフォルトでは、これらのIDは特定の方法でグループ化されたり整理されたりしません。 + +例えば、あなたの猫の写真の一つはトランザクションID [bVLEkL1SOPFCzIYi8T_QNnh17VlDp4RylU6YTwCMVRw](https://arweave.net/bVLEkL1SOPFCzIYi8T_QNnh17VlDp4RylU6YTwCMVRw) で保存されている一方で、別の写真は [FguFk5eSth0wO8SKfziYshkSxeIYe7oK9zoPN2PhSc0](https://arweave.net/FguFk5eSth0wO8SKfziYshkSxeIYe7oK9zoPN2PhSc0) というトランザクションIDで保存されています。 + +| 猫1 | 猫2 | +|------|------| +| | | +| bVLEkL1SOPFCzIYi8T_QNnh17VlDp4... | FguFk5eSth0wO8SKfziYshkSxeIYe7oK9zoPN2PhSc0 | + +これらのトランザクションIDは少し扱いにくく、関連するファイルを見つけるのが難しくなります。パスマニフェストがなければ、100枚の猫の写真をアップロードした場合、**100の異なるIDとリンク**を追跡する必要があります! + +パスマニフェストは、複数のトランザクションを単一の基本トランザクションIDの下にリンクし、人間が読みやすいファイル名を与える方法です。猫の例に関連付けると、1つの基本トランザクションIDを覚えておき、それをフォルダのように使い、`[{base id}/cat1.jpg](https://arweave.net/6dRh-TaiA5qtd0NWqrghpvC4_l3EtA3AwCluwPtfWVw/cat1.jpg)`や`[{base id}/cat2.jpg](https://arweave.net/6dRh-TaiA5qtd0NWqrghpvC4_l3EtA3AwCluwPtfWVw/cat2.jpg)`のようなもっと覚えやすいファイル名で猫の写真にアクセスすることができます。 + +読みやすいファイル名のグループ化を作成することは、Arweave上で実用的なアプリケーションを作成するために不可欠であり、以下の例で探求するように、ウェブサイトや他のファイルコレクションをホストする能力を開放します。 + +### マニフェストは何に使えますか? + +--- + +ファイルを階層的にグループ化する必要がある場合、マニフェストは便利です。例えば: + +- **NFTコレクションの保存:** + - [https://arweave.net/X8Qm…AOhA/0.png](https://arweave.net/X8Qm4X2MD4TJoY7OqUSMM3v8H1lvFr-xHby0YbKAOhA/0.png) + - [https://arweave.net/X8Qm…AOhA/1.png](https://arweave.net/X8Qm4X2MD4TJoY7OqUSMM3v8H1lvFr-xHby0YbKAOhA/1.png) + +これは、ストレージAPIやIPFS上でNFT画像とメタデータにリンクする際に使用される一般的な基本パスアプローチと同様です。 + +- **ウェブサイトのホスティング:** + - https://arweave.net/X8Qm…AOhA/index.html + - https://arweave.net/X8Qm…AOhA/styles.css + - https://arweave.net/X8Qm…AOhA/public/favicon.png + +### マニフェストの構造 + +--- + +パスマニフェストは、以下のタグを使用して作成され、Arweaveに投稿される特別なトランザクション形式です: + +`{ name: "Content-type", value: "application/x.arweave-manifest+json" }` + +そして、以下の例に一致するJSON形式のトランザクションデータを持っています。 + + +```json +{ + "manifest": "arweave/paths", + "version": "0.2.0", + "index": { + "path": "index.html" + }, + "fallback": { + "id": "cG7Hdi_iTQPoEYgQJFqJ8NMpN4KoZ-vH_j7pG4iP7NI" + }, + "paths": { + "index.html": { + "id": "cG7Hdi_iTQPoEYgQJFqJ8NMpN4KoZ-vH_j7pG4iP7NI" + }, + "js/style.css": { + "id": "fZ4d7bkCAUiXSfo3zFsPiQvpLVKVtXUKB6kiLNt2XVQ" + }, + "css/style.css": { + "id": "fZ4d7bkCAUiXSfo3zFsPiQvpLVKVtXUKB6kiLNt2XVQ" + }, + "css/mobile.css": { + "id": "fZ4d7bkCAUiXSfo3zFsPiQvpLVKVtXUKB6kiLNt2XVQ" + }, + "assets/img/logo.png": { + "id": "QYWh-QsozsYu2wor0ZygI5Zoa_fRYFc8_X1RkYmw_fU" + }, + "assets/img/icon.png": { + "id": "0543SMRGYuGKTaqLzmpOyK4AxAB96Fra2guHzYxjRGo" + } + } +} +``` + +- **フォールバック:** + +マニフェストのバージョン0.2.0では、`fallback`属性が導入されました。`fallback`は、リゾルバがリクエストされたパスを正しく解決できない場合にフォールバックするためのArweaveデータアイテムトランザクションIDを定義するサブ属性`id`を受け付けるオブジェクトです。 + +公式のArweaveパスマニフェストドキュメントでの出典とさらなる読み物: [Arweave Docs](https://github.com/ArweaveTeam/arweave/blob/master/doc/path-manifest-schema.md) \ No newline at end of file diff --git a/docs/src/ja/concepts/permaweb.md b/docs/src/ja/concepts/permaweb.md new file mode 100644 index 0000000..5adec5d --- /dev/null +++ b/docs/src/ja/concepts/permaweb.md @@ -0,0 +1,21 @@ +--- +locale: ja +--- +# パーマウェブへようこそ + +パーマウェブはウェブに似ていますが、永久的です。開発者はパーマウェブサービスの上にアプリやサイトを構築し、それらはArweave上で永遠に存在します。 + +![パーマウェブ](https://arweave.net/lK3mptAgC2cijnPvogKaLCOsKSuPlvLu_6opnEOrpT0) + +パーマウェブの利点: + +1. サイトやアプリは永続的で、消える心配がありません(サポートするチームが移行しても)。 +2. アプリ開発者は、新しいバージョンが実際に価値を追加することを確認する必要があります。さもなければ、古いバージョンをオフにする理由がありません。 +3. すべてのパーマウェブアプリは共通のストレージレイヤー、Arweaveを共有しているため、他のアプリのデータと組み合わせることができます。 +4. あなたのデータはあなたのウォレットによって所有され、アプリからアプリへと移動できます。 + +## 従来のウェブとパーマウェブの比較 + +![パーマウェブと従来のウェブ](https://arweave.net/5EP6mhpHsfnTsmFk7aVyK8jF6zqavxJT4kgx70mUc5I) + +パーマウェブに関する詳細情報は、[mediumの記事](https://arweave.medium.com/welcome-to-the-permaweb-ce0e6c73ddfb)をご覧ください。 \ No newline at end of file diff --git a/docs/src/ja/concepts/permawebApplications.md b/docs/src/ja/concepts/permawebApplications.md new file mode 100644 index 0000000..05b60ff --- /dev/null +++ b/docs/src/ja/concepts/permawebApplications.md @@ -0,0 +1,57 @@ +--- +locale: ja +--- +# パーマウェブアプリケーション + +パーマウェブアプリケーションは、ブラウザで動作するウェブページまたはウェブアプリの一種です。パーマウェブアプリの特徴は、Arweaveにデプロイされ、永遠に保存されることです。開発チームが移行しても、ユーザーはパーマウェブアプリがオンラインで利用可能であることを安心して確認できます。パーマウェブアプリの大きな利点は、データがArweaveに保存されるため、現在使用しているアプリの改善につながる他のアプリに簡単にインポートできることです。 + +## パーマウェブとは? + +::: info INFORMATION +パーマウェブについてさらに詳しく知りたい方は、[The Permaweb](./permaweb.md)に関する記事をご覧ください。 +::: + +パーマウェブは、[Arweaveのパーマウェブサービス](./permaweb.md)の上に構築されたサイト、アプリ、スマートコントラクトのコレクションです。パーマウェブの主要な部分は以下の通りです。 + +- ゲートウェイサービス(例:arweave.net、arweave.live、ar.io) +- バンドルサービス(例:ardrive turbo) +- シーケンサーサービス(例:warp.cc) +- インデックスサービス(例:goldsky) + + + +### ゲートウェイサービス + +ゲートウェイサービスは、Arweave上のデータとブラウザでのデータ表示の間の橋渡しを行います。ゲートウェイは、トランザクションデータを提供するだけでなく、インデックスサービスも提供し、ArweaveトランザクションをクエリするためのGraphQLエンドポイントを公開します。 + +### バンドルサービス + +バンドルサービスは、トランザクションをトランザクションバンドルに集約し、それらのバンドルが直接Arweaveに投稿されることを保証します。Irys.networkのようなバンドルサービスを使用することで、数十万のトランザクションを1つのArweaveブロックに投稿できます。 + +### シーケンシングサービス + +シーケンサーは、Arweaveネットワーク上に保存されたビジネスロジックを計算するためのSmartWeaveコントラクトの高性能を実現します。 + +### インデックスサービス + +インデックスサービスは、Arweave上のすべてのトランザクションを監視し、それらを高速クエリに適したインデックスデータベースにインポートします。その後、パーマウェブアプリがArweaveデータの最適化されたクエリを行えるようにGraphQLエンドポイントを公開します。 + +これらのサービスは協力してパーマウェブサービスレイヤーを形成し、開発者がパーマウェブ上に完全に分散型のアプリケーションを構築できる力を与えます。 + +## アプリケーション開発 + +パーマウェブでのアプリケーション開発は、`シングルページアプリケーション`の開発に似ています。アプリケーションは、ウェブブラウザで実行されるフロントエンド機能で構成され、ビジネスロジックと永続性の層を構成するためにGraphQL(読み取り/クエリ)、Irys(書き込み)、SmartWeave(分散計算)を使用します。 + +![一般的なパーマウェブアプリ](https://arweave.net/UjbgAk8duudDc97lOYIt7rBVtRHp2Z9F6Ua5OcvwNCk/) + +現代のウェブアプリケーションフレームワークと[パスマニフェスト](./manifests.md)仕様を活用することで、開発者はウェブサイトやアプリケーションをパーマウェブにデプロイできます。 + +パーマウェブアプリの作成とデプロイについてさらに詳しく学ぶには、お気に入りのフレームワークのスターターキットをご覧ください。 + +- [React](../kits/react/index.md) +- [Svelte](../kits/svelte/index.md) +- [Vue](../kits/vue/index.md) + +::: tip フレームワークが見つからない? +自分のフレームワークが見つからない場合は、貢献してみませんか? [料理本への貢献方法](../getting-started/contributing.md) +::: \ No newline at end of file diff --git a/docs/src/ja/concepts/post-transactions.md b/docs/src/ja/concepts/post-transactions.md new file mode 100644 index 0000000..dfaa35d --- /dev/null +++ b/docs/src/ja/concepts/post-transactions.md @@ -0,0 +1,53 @@ +--- +locale: ja +--- +# トランザクションの投稿 + +トランザクションをArweaveに投稿する方法はいくつかあります。それぞれに独自の利点と制約があります。以下の図は、トランザクションを投稿するための4つの主要なアプローチを示しています。 + +`ピアへの直接投稿`、`ゲートウェイへの直接投稿`、`バンドル`、および`ディスパッチ`です。 + + + +::: tip 確実なトランザクション +大量のトランザクションを投稿する場合や迅速な決済時間が望ましい場合は、バンドルサービスを利用することを検討してください。バンドラーは大量のトランザクションを即座に決済し、トランザクションデータを数ミリ秒内に利用可能にします。バンドルサービスは投稿されたトランザクションを保持し、ブロックに確認されるまで待機します。トランザクションが最新のブロックに含まれない場合、バンドルサービスは新しいブロックごとに再投稿します。 +::: + +## 直接トランザクション + +Arweaveに直接投稿されたトランザクションには、**ウォレット間**のトランザクションと**データ**トランザクションの2種類があります。最初のものは**AR**トークンをウォレットアドレス間で転送します。後者はデータをArweaveに投稿し、関連するストレージコストを支払います。 + +興味深いことに、**データ**トランザクションは、ストレージコストを支払いながらウォレットアドレスに**AR**トークンを転送することもできます。 + +すべてのトランザクションでは、ユーザーが最大2KBのメタデータを[カスタムタグ](./tags.md)の形式で指定できます。 + +### ピアへの直接投稿 + +トランザクションはArweaveピア(マイニングノード)に直接投稿できます。これはトランザクションを投稿する最も分散型の手段の1つであり、クライアントはどのピアに投稿するかを選択できます。 + +このアプローチには欠点もあります。ピアは来たり去ったりすることがあるため、アプリからトランザクションを確実に投稿することが難しくなります。アクティブなピアのリストをクエリして投稿前に選択することも可能ですが、プロセスにオーバーヘッドと摩擦を追加します。さらに、ピアに投稿されたトランザクションは、ブロックにマイニングされるまでゲートウェイでのみクエリ可能です。これにより、トランザクションをピアに投稿してから、ゲートウェイからブラウザで読み取れるまでに1〜2分の遅延が発生します。 + +上記の理由から、開発者は直接トランザクションを投稿する際に`arweave-js`をゲートウェイにポイントするように設定することが一般的です。ゲートウェイの楽観的キャッシュは、トランザクションをほぼ即座に利用可能にします。 + +### ゲートウェイへの直接投稿 + +ゲートウェイは、クライアントとArweaveのピアネットワークの間に位置しています。ゲートウェイの主な機能の1つは、トランザクションをインデックスし、ネットワークに投稿されたデータを楽観的にキャッシュすることです。これにより、トランザクションは「保留中」の状態でほぼ即座にクエリ可能になり、ゲートウェイ上に構築されたアプリケーションはより応答性が高くなります。ただし、トランザクションがブロックにマイニングされない場合、楽観的キャッシュから外れるリスクがあります。 + +直接トランザクションを投稿する方法の例は、[このガイド](../guides/posting-transactions/arweave-js.md)にあります。 + +## バンドルトランザクション + +Arweaveの上に構築されたサービスは、パーマウェブビルダーに追加のユーティリティを提供し、時にはパーマウェブサービスと呼ばれます。バンドラーはそのようなサービスの1つです。バンドラーは複数の個別トランザクションをまとめて、1つのトランザクションとして直接Arweaveに投稿します。この方法により、プロトコルレベルで1つのトランザクションが数万のバンドルトランザクションを含むことができます。ただし、1つの制限があります。**データ**トランザクションのみがバンドルに含まれることができます。**ウォレット間**のトランザクション(**AR**トークンをウォレットアドレス間で転送する)は、Arweaveに直接投稿される個別トランザクションとして行う必要があります。 + +## ディスパッチトランザクション + +バンドルトランザクションを投稿する別の方法は、ブラウザからです。ブラウザは、アップロードできるデータのサイズに関していくつかの制約を課しますが、ブラウザベースのウォレットはバンドラーにトランザクションを投稿できます。Arweaveブラウザウォレットは、`dispatch()`APIメソッドを実装しています。小さなトランザクション(100KB以下)を投稿する場合は、ウォレットの`dispatch()`メソッドを使用してバンドルトランザクションの利点を享受できます。 + +100KB以下のバンドルトランザクションをArweaveウォレットの`dispatch()`メソッドで投稿する方法の例は、[このガイド](../guides/posting-transactions/dispatch.md)にあります。 + +## リソース + +- [arweave-js](../guides/posting-transactions/arweave-js.md) の例 +- [dispatch](../guides/posting-transactions/dispatch.md) の例 +- [arseeding-js](../guides/posting-transactions/arseeding-js.md) の例 +- [akord](../guides/posting-transactions/akord.md) の例 \ No newline at end of file diff --git a/docs/src/ja/concepts/psts.md b/docs/src/ja/concepts/psts.md new file mode 100644 index 0000000..2061556 --- /dev/null +++ b/docs/src/ja/concepts/psts.md @@ -0,0 +1,70 @@ +--- +locale: ja +--- +# 概要 + +--- +> **⚠️ 廃止通知** +> +> この文書は廃止されており、古い情報が含まれている可能性があります。 + +利益共有トークン(PST)は、次の構造を含むスマートウィーブトークンの一種です。 + +| プロパティ | 型 | +| ----------- | ----------- | +| balances | オブジェクト | +| name | 文字列 | +| ticker | 文字列 | +| transfer | メソッド | +| balance | メソッド | + +PSTは通常、プロトコルや「利益共有コミュニティ」(PSC)を管理するために使用されます。これはDAOに似ています。 + +### PSTはどのように配布されますか? + +--- + +アプリケーションの創設者は、一定数のPSTを作成し、彼らの判断で配布できます。資本を調達するために保持したり、投資家に販売したりすることができます。 + +プロトコルは、成長を促進するために、作業を貢献したり、コミュニティのタスクを完了したりする報酬としてPSTを提供できます。 + +PSTは[Permaswap](https://permaswap.network/#/)(現在テストネット中)でお互いに交換することもでき、開発者は[Verto Flex](https://github.com/useverto/flex)を使用してトークン取引の権限を設定できます。 + +### 特徴 + +--- + +PSTは「**マイクロ配当**」として機能します。プロトコルが使用されると、チッピング額が保持者に配分されるために取っておかれます。このチップは$ARで支払われ、PSTの通貨ではありません。これにより、開発中のアプリとArweave自体との間に特別な関係が生まれます。 + +### 利点 + +--- + +- 開発者がプロトコルを運営し、所有権を柔軟に分配する方法を提供します +- PSTはプロトコルの作業やコミュニティのタスクの支払いに使用できます +- 創設者はネットワークの使用を増やすインセンティブがあり、収益に直接結びついています +- 保持者は**内在的**価値(報酬$AR、より多くの「株式」ではなく)を得ます + +### 例 PST: ARDRIVEトークン + +--- + +ArDriveは、適切に名付けられたPST、ARDRIVEを利用したパーマウェブアプリケーションです。 + +誰かがArDriveを通じてデータをアップロードするために$ARを支払うと、15%のコミュニティ手数料がランダムな重み付け方式で単一のトークン保持者に配分されます。 + +![ArDrive PSTサイクル](~@source/images/ardrive-pst.png) + +ユーザーがデータをアップロード -> ARDRIVEトークン保持者が$ARを受け取る -> ARDRIVEトークン保持者はこの$ARを使用してファイルをアップロード -> サイクルが繰り返される。このようにして、あなた自身のPSTを実装する方法を理解してもらえればと思います。 + +### PSTを探求する + +--- + +ViewblockやSonar by Redstoneを使用してPSTを表示するのが最も適切です。PSTを特に表示するリンクを使用して、誰かが見つける手間を省いてください。 + +[PST契約](https://viewblock.io/arweave)を表示するために、Etherscanのような体験を得るためにViewBlockを使用できます。こちらの[例](https://viewblock.io/arweave/contract/-8A6RexFkpfWwuyVO98wzSFZh0d6VJuI-buTJvlwOJQ)を見てください。 + +もう一つのオプションは、[RedStone Finance](https://sonar.redstone.tools/#/app/contracts)によって構築されたArweaveスマートコントラクトエクスプローラーであるSonarです。こちらの[例](https://sonar.warp.cc/?#/app/contract/-8A6RexFkpfWwuyVO98wzSFZh0d6VJuI-buTJvlwOJQ)をご覧ください。 + +> 一部のコミュニティメンバーは、PSTを「パーマウェブサービストークン」と呼ぶことを議論しています。PSTに関してはまだ多くの探索が必要です → [ここで議論に参加してください](https://discord.com/channels/999377270701564065/999377270701564068/1055569446481178734)(Discord)。 \ No newline at end of file diff --git a/docs/src/ja/concepts/queryTransactions.md b/docs/src/ja/concepts/queryTransactions.md new file mode 100644 index 0000000..b414cd0 --- /dev/null +++ b/docs/src/ja/concepts/queryTransactions.md @@ -0,0 +1,88 @@ +--- +locale: ja +--- +# トランザクションのクエリ + +データを永久に保存するだけでは不十分です。Arweaveを有用にするためには、データが発見可能で取得可能である必要があります。このガイドでは、Arweave上のデータをクエリするためのさまざまなアプローチをまとめています。 + +## GraphQL + +時間の経過とともに、GraphQLインターフェースを実装するインデックスサービスは、Arweave上のトランザクションデータをクエリするための好ましい方法となりました。インデックスサービスは、ネットワークに追加されるトランザクションとブロックヘッダーを読み取ります(通常、サービスが運営する完全なArweaveノードから)。読み取られると、ヘッダー情報はデータベースに挿入され、インデックス化され、効率的にクエリされます。インデックスサービスはこのデータベースを使用して、クライアントがクエリできるGraphQLエンドポイントを提供します。 + +GraphQLには、クエリデータセットを取得するのに理想的な利点がいくつかあります。インデックスサービスは、すべてのタイプのデータをクエリできる単一のエンドポイントを作成できます。このサービスは、REST APIを使用する場合のように各リソースごとにHTTPリクエストを行うのではなく、単一のリクエストで複数のリソースを返すことができます。GraphQLを使用すると、クライアントは単一の往復で複数のリクエストをバッチ処理し、必要なデータを正確に指定できるため、パフォーマンスが向上します。 + +以下のGraphQLの例は、特定のオーナーのウォレットアドレスから「Type」タグの値が「manifest」であるすべてのトランザクションIDをクエリします。タグに関する詳細については、[トランザクションタグ](tags.md)に関するガイドをお読みください。 + +```js:no-line-numbers +const queryObject = { + query: + `{ + transactions ( + owners:["${address}"], + tags: [ + { + name: "Type", + values: ["manifest"] + } + ] + ) { + edges { + node { + id + } + } + } + }` +}; +const results = await arweave.api.post('/graphql', queryObject); +``` + +### 公開インデックスサービス + +[https://arweave.net/graphql](https://arweave.net/graphql) + +[https://arweave-search.goldsky.com/graphql](https://arweave-search.goldsky.com/graphql) + +[https://knn3-gateway.knn3.xyz/arseeding/graphql](https://knn3-gateway.knn3.xyz/arseeding/graphql) + +## ブロックの検査 + +Arweaveにアップロードされた各データは、独自のトランザクションIDを持ち、それぞれがユニークなブロックに含まれ、ブロックチェーンに追加されます。各トランザクションに関連付けられたデータは256KBのチャンクに分割され、Arweaveのデータセットに順次追加されます。現在のブロックから[ブロックを遡る](https://arweave.net/block/current)ことができ、各ブロックを検査して問題のトランザクションIDを見つけることができます。見つかったら、チャンクのオフセットをブロックから取得し、Arweaveピアからチャンクを直接リクエストするために使用できます。これはネットワーク上のデータを見つけて読むための最も低いレベルの方法です。幸いにも、[GraphQL](#graphql)のような労力の少ないアプローチが利用可能です。 + +## ARQL + +::: warning +ARQLは非推奨であり、ゲートウェイまたはインデックスサービスでのGraphQLクエリに置き換えられました。一部のピアはまだARQLリクエストを処理するかもしれませんが、結果の可用性と正確性は保証されていません。 +::: + +Arweave Query Language (ARQL)は、Arweaveの開発初期に使用されていました。ブロックやチャンクと共に、ピアは個々のトランザクションをインデックス化したSQLデータベースも維持していました。クライアントはARQLを使用してピアにクエリを投げ、トランザクションデータを取得できました。以下はARQLクエリ構文の例です。 + +```js:no-line-numbers +let get_mail_query = + { + op: 'and', + expr1: { + op: 'equals', + expr1: 'to', + expr2: address + }, + expr2: { + op: 'equals', + expr1: 'App-Name', + expr2: 'permamail' + } + } + +const res = await this.arweave.api.post(`arql`, get_mail_query) +``` + +このクエリ手法は、ウィーブデータセットが小さくインデックス化しやすかったため、十分でした。しかし、Arweaveの採用が加速するにつれて、データセットをインデックス化しARQLクエリに応じることは、計算コストの増加を引き起こしました。時間が経つにつれて、マイニングがますます競争的になり、ピアはARQLサービスを提供する余裕が少なくなっていきました。これが最終的にインデックスサービスと、今日のArweaveで一般的な[GraphQLクエリ](#graphql)の必要性のきっかけとなりました。 + +ただし、ピアから直接データをクエリする道は残されています。[Permaweb Payments Protocol (P3)](https://arweave.net/UoDCeYYmamvnc0mrElUxr5rMKUYRaujo9nmci206WjQ)は、クライアントがサービスの対価を支払うことを可能にするためにコミュニティによって開発された仕様です。P3を使用することで、インデックスサービスを提供したいピアは、そのサービスに対して料金を請求することで、利益を上げながら運営することが可能になります。 + +## リソース + +- [Arweaveのクエリガイド](../guides/querying-arweave/queryingArweave.md) +- [ArDBパッケージ](../guides/querying-arweave/ardb.md) +- [ar-gqlパッケージ](../guides/querying-arweave/ar-gql.md) +- [GraphQLリファレンス](../references/gql.md) \ No newline at end of file diff --git a/docs/src/ja/concepts/smartweave.md b/docs/src/ja/concepts/smartweave.md new file mode 100644 index 0000000..577236c --- /dev/null +++ b/docs/src/ja/concepts/smartweave.md @@ -0,0 +1,126 @@ +--- +locale: ja +--- +# SmartWeave + +> **⚠️ 廃止のお知らせ** +> +> このドキュメントは廃止されており、古い情報を含んでいる可能性があります。 + +## SmartWeaveとは? + +SmartWeaveは、Arweave上の主要なスマートコントラクトのパラダイムに与えられた名前です。SmartWeaveコントラクトのユニークな特性は、コントラクトの現在の状態が「レイジー評価」によって提供されることです。これは、Arweaveのマイニングノードがすべてのコントラクトの現在の状態を常に評価するのではなく、コントラクトを読むクライアントが自分自身で状態を評価することを意味します。 + +## SmartWeaveが重要な理由 + +分散型アプリケーションの状態とロジックは、他のデータと同様に検閲に対する耐性があり、永続的で、検証可能である必要があります。SmartWeaveは、開発者がアプリの状態とロジックをオンチェーンでカプセル化し、信頼できる検証可能な方法で実行するためのスマートコントラクトを書くことを可能にします。これは、Arweaveプロトコルがノードにネットワークのためにスマートコントラクトの状態を評価するインセンティブを含んでいないため、決して簡単なことではありません。 + +SmartWeaveは、状態を保持するために永続的なストレージを利用するための不変の追加専用パターンを提供します。その結果、許可不要で信頼できる方法でプロトコルやアプリケーションに動的な機能を提供できる完全に分散型のオンチェーン状態マシンが実現します。SmartWeaveを使用することで、開発者はArweaveに保存され、時間とともに変更されないことが保証されたスマートコントラクトを作成できます。これにより、[Permawebアプリケーション](/concepts/permawebApplications.md)を動的機能を持つ形で構築できるようになります。 + +開発者が自分のPermawebアプリケーションのロジックを実装するためにSmartWeaveを使用する理由はいくつかあります: + +- **分散ストレージ:** SmartWeaveはArweave上に構築されているため、SmartWeaveを使用して作成されたアプリケーションは、中央サーバーではなく、ノードの分散ネットワーク上に保存されます。これにより、検閲や改ざん、その他の干渉に対する耐性が向上します。 + +- **レイジー評価:** SmartWeaveコントラクトのレイジー評価機能により、効率的でスケーラブルな実行が可能です。Arweaveノードがコントラクトの状態を常に評価するのではなく、コントラクトを読むクライアントがその状態を評価する責任を負うことで、ネットワークノードの処理能力を利用することができます。 + +- **言語サポート:** SmartWeaveはJavaScript、TypeScript、Rust、Go、AssemblyScript、WASM(WebAssembly)など、さまざまなプログラミング言語をサポートしています。これにより、開発者はSmartWeaveアプリケーションを作成する際に最も馴染みのある言語を使用できます。 + +- **データの耐久性:** Arweaveはデータを非常に耐久性があり、長期間保存できる方法で保存することを目的としています。これは、歴史的記録や科学データなど、長期間データを保存する必要があるアプリケーションに便利です。 + +- **経済モデル:** Arweaveは、永久保存の概念に基づくユニークな経済モデルを使用しており、データを無期限に保存するためにマイナーにインセンティブを与えます。これにより、SmartWeaveを使用して作成されたPermawebアプリケーションの長期的な実現可能性と耐久性が保証されます。 + +## SmartWeaveの仕組み + +SmartWeaveコントラクトは、コントラクトの初期状態から構築され、トランザクションタグを使用して編集、追加、削除されます。 + +`Warp`(以前の`RedStone`)のようなSmartWeave SDKは、これらのトランザクションをクエリしてコントラクトの状態をローカルに構築し、各トランザクションでコントラクトの状態を変更します。Evaluator(`Warp`)は、タグを使用してコントラクトのトランザクションをクエリします。トランザクションがコントラクトの一部であることは、App-NameタグとContractタグによって判断されます。 + +以下はコントラクトの**相互作用**の例です。 +- `App-Name`は、それがSmartweaveの**アクション**であることを示します。 +- `Contract`タグは初期コントラクト状態の特定のトランザクションIDを示します。 +- `Input`タグは、コントラクトに実行すべき関数と必要な他のデータを提供します: + +```json +[ + { + name:"App-Name" + value:"SmartWeaveAction" + }, + { + name:"App-Version" + value:"0.3.0" + }, + { + name:"Contract" + value:"pyM5amizQRN2VlcVBVaC7QzlguUB0p3O3xx9JmbNW48" + }, + { + name:"Input" + value:"{ + "function":"setRecord", + "subDomain":"@", + "transactionId":"lfaFgcoBT8auBrFJepLV1hyiUjtlKwVwn5MTjPnTDcs" + }" + } +] +``` +以下は**コントラクト**の例です。 +- `App-Name`は、それがSmartweaveの**コントラクト**であることを示します。 +- `Contract-Src`タグはコントラクトのソースコードを指します: + +```json +[ + { + key:"App-Name" + value:"SmartWeaveContract" + }, + { + key:"App-Version" + value:"0.3.0" + }, + { + key:"Contract-Src" + value:"JIIB01pRbNK2-UyNxwQK-6eknrjENMTpTvQmB8ZDzQg" + }, + { + key:"SDK" + value:"RedStone" + }, + { + key:"Content-Type" + value:"application/json" + } +] +``` + +結果として得られる状態は、クライアント側のSDKがユーザーの残高、コントラクト所有者、およびその他のコントラクト特有の詳細を計算するために使用できる現在のコントラクト状態です。呼び出し元が検証済みのコントラクト状態を取得すると、ブロックチェーンにデプロイするためのユーザーの相互作用を構築できます。この相互作用は、マイニングまたは[ゲートウェイ](/concepts/gateways.md)でインデックスされると、次回コントラクト状態が構築される際に含まれます。 + +SmartWeaveプロトコルの包括的な概要、主要な実装であるWarp Contracts、その他については、[Warp Academy](https://academy.warp.cc/)を訪れてください。ステップバイステップのチュートリアルを掘り下げ、先進的な概念を探索し、SmartWeaveがどのようにパーマウェブを強化するかを発見してください。 + +## SmartWeaveエコシステムプロジェクト + +SmartWeaveスマートコントラクトを活用しているエコシステムプロジェクトは多数ありますが、以下にいくつかの注目すべきプロジェクトを示します: + +### 実装 +- [Warp](https://warp.cc/) | SmartWeave SDK、チュートリアルの主要プロバイダーであり、SmartWeaveプロトコルの維持に協力しています。 +- [MEM](https://www.mem.tech/) | 分子実行マシン(MEM)は、分散環境内で高い可用性と高性能なアプリケーションの作成と使用を支える開発者プラットフォームです。 + +### ツール +- [SonAr](https://sonar.warp.cc/#/app/contracts)| SmartWeaveコントラクトエクスプローラー、Warpによって作成され、ホストされています。 + +### リソース +- [Warp Academy](https://academy.warp.cc/) | SmartWeaveに関するすべての情報が集まるワンストップショップ + +### アプリ +- [Permapages](https://permapages.app/) | 永続的なウェブページ作成ツール、ArNS購入ポータル、ANT作成ポータル。あなたのパーマウェブ上のプロフィール。 +- [ArNS](arns.md) | Arweave Name System +- [WeaveDB](https://weavedb.dev/) | スマートコントラクトとしてのNoSQLデータベース。 +- [KwilDB](https://docs.kwil.com/)| スマートコントラクトとしてのSQLデータベース。 +- [ArDrive Inferno](https://ardrive.io/inferno/) | Ardriveを介してアップロードするためのPSTを取得します。 +- [Akord](https://akord.com/) | Arweave上の安全なストレージを提供するプロトコルで、シームレスなUXを実現します。 +- [FirstBatch](https://www.firstbatch.xyz/) | FirstBatchは、開発者や企業が個別化されたプライベート +- [Othent](https://othent.io/) | Web3 transactions with existing traditional social logins. +- [BazAR](https://bazar.arweave.dev/) | Digital content marketplace with real-world rights. +- [Alex the Archieve](https://alex.arweave.dev/) | A decentralized archival platform utilizing Arweave's immutable storage. + +and so much more. diff --git a/docs/src/ja/concepts/tags.md b/docs/src/ja/concepts/tags.md new file mode 100644 index 0000000..9db5935 --- /dev/null +++ b/docs/src/ja/concepts/tags.md @@ -0,0 +1,54 @@ +# トランザクションメタデータ(タグ) + +Arweaveは、各エントリーが独自のトランザクションである永続的な追加専用のハードドライブと考えることができます。トランザクションにはユニークなID、署名、およびトランザクションを投稿するために署名して支払ったアドレスの所有者アドレスがあります。それらのヘッダー値に加えて、Arweaveプロトコルではユーザーがカスタムタグでトランザクションにタグ付けすることを許可しています。これらはトランザクションに追加されるコレクション名の値ペアとして指定されます。これらのタグにより、Arweaveをクエリして特定のタグを含むすべてのトランザクションを見つけることが可能になります。トランザクションをクエリしてフィルタリングする能力は、Arweave上に構築されたアプリをサポートするために重要です。 + +## トランザクションタグとは? + +トランザクションタグはキーと値のペアであり、base64URLのキーと値の組み合わせはArweaveネイティブトランザクションの最大2048バイト未満である必要があります。 + +一般的なトランザクションタグの例には以下が含まれます: + +- `Content-Type`: パーマウェブ上でのレンダリング用のコンテンツのMIMEタイプを指定するために使用されます。 +- `App-Name`: データを書き込むアプリを説明するタグです。 +- `App-Version`: このデータのバージョンで、App-Nameとペアになります。 +- `Unix-Time`: Unixタイムスタンプで、エポックからの**秒数**です。 +- `Title`: トランザクションに格納されたコンテンツの名前または簡単な説明を提供するために使用されます。 +- `Description`: コンテンツの詳細な説明を提供するために使用されます。 + +トランザクションタグは、トランザクションの検索用のインデックス作成、トランザクションのカテゴリ分け、またはトランザクションに格納されたコンテンツに関するメタデータの提供など、さまざまな目的に使用できます。 + +## トランザクションタグに関する知っておくべきこと + +トランザクションタグは、キーと値の両方のためにBase64URLエンコードされた文字列としてエンコードされます。これにより、キーや値としてバイトの配列を投稿し、安全にhttpを介して転送することが可能になります。デコードなしでは人間が読めるわけではありませんが、暗号化とは見なされません。 + +直接Arweaveに投稿されたトランザクションのトランザクションタグの最大総サイズは2048バイトです。このサイズは、トランザクションタグのすべてのキーとすべての値を連結することによって決定されます。 + +トランザクションタグは、GraphQLクエリで使用され、フィルタリングされたトランザクションアイテムのセットを返すことができます。 + +## コミュニティで使用される一般的なタグ + +|
タグ名
| 説明 | 使用例 | +| --------------------------------------- | --------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| App-Name | SmartWeave識別子のために最も一般的に使用される | 一般的な値はSmartWeaveContract、SmartWeaveAction、SmartWeaveContractSourceです | +| App-Version | このデータのバージョンで、これを消費するアプリを表すことがあります | 現在のSmartWeaveバージョンは0.3.0です | +| Content-Type | トランザクションに含まれるデータを識別するためのMIMEタイプ | text/html、application/json、image/png | +| Unix-Time | Unixタイムスタンプで、エポックからの**秒数** | トランザクションが提出された時間 | +| Title | コンテンツを説明するためのANS-110標準 | 原子資産に名前を提供 | +| Type | データの分類のためのANS-110標準 | パーマウェブ資産を分類するためのタイプ | + +## 例 + +```ts +const tx = await arweave.createTransaction({ data: mydata }); +tx.addTag("Content-Type", "text/html"); +tx.addTag("Title", "My incredible post about Transaction Tags"); +tx.addTag("Description", "This is one post you do not want to miss!"); +tx.addTag("Topic:Amazing", "Amazing"); +tx.addTag("Type", "blog-post"); + +await arweave.transactions.sign(tx, jwk); +await arweave.transactions.post(tx); +``` +## まとめ + +トランザクションタグがArweaveテックスタックにどのように関与しているかを理解することで、Permawebをアプリケーションプラットフォームとして使用する際の問題を解決するための文脈を提供できます。タグは、共通のデータ標準とパターンを作成し、Permaweb上での非競合データ体験を促進するためのツールを提供します。その結果、エコシステムのユーザーは、データが常にユーザーのものであり、アプリケーションのものでないため、消費するアプリケーションと作成するコンテンツの選択肢を持つことができます。 \ No newline at end of file diff --git a/docs/src/ja/concepts/transaction-data.md b/docs/src/ja/concepts/transaction-data.md new file mode 100644 index 0000000..4a7766b --- /dev/null +++ b/docs/src/ja/concepts/transaction-data.md @@ -0,0 +1,136 @@ +--- +locale: ja +--- +# トランザクションデータの取得 + +インデクシングサービスはトランザクションメタデータのクエリを可能にしますが、トランザクションデータ自体へのアクセスは提供しません。これは、トランザクションデータのキャッシングとメタデータのインデクシングが異なるリソース要件を持つためです。インデクシングサービスは、データベースでのクエリを実行するために主にコンピューティングリソースに依存しますが、トランザクションデータは、ストレージと帯域幅を最適化するためにコンテンツ配信ネットワーク(CDN)へのデプロイに適しています。 + +トランザクションデータキャッシングサービスは、ほとんどのゲートウェイによって一連のHTTPエンドポイントを介して提供されています。これらのエンドポイントからトランザクションデータをリクエストするために、任意のHTTPクライアント/パッケージを使用できます。たとえば、JavaScriptの場合はAxiosやFetch、PHPの場合はGuzzleなどです。 + + + +トランザクションデータキャッシングサービスをバイパスしてArweaveのピア/ノードからデータを直接取得したい場合もできますが、かなりの作業が必要です! + +トランザクションデータは、ネットワークの非常に初期の段階から現在のブロックまで、256KBのチャンクの連続したシーケンスとしてArweaveに保存されています。この形式は、マイナーがArweaveデータを保存していることを証明するために参加するSPoRAマイニングメカニズムをサポートするよう最適化されています。 + +::: info +1. よく知られたピアからピアのリストを取得します。 +1. ピアに対して、トランザクションデータを含むチャンクのオフセットを要求します。 +1. ピアにチャンクを要求します。 + 1. ピアがチャンクを提供する場合、それらを元の形式に結合します。 +1. (ピアにチャンクがない場合)ピアリストを歩き、チャンクを要求します。 +1. 訪問した各ピアについて、彼らのピアリストを確認し、すでにリストにないピアを追加します。 +1. ステップ3から繰り返し、すべてのチャンクを取得するまで続けます。 +::: + +これは、Arweaveネットワークからデータを取得するたびに実行するにはかなりの作業量です。たとえば、[https://public-square.g8way.io](https://public-square.g8way.io)のようにツイートのタイムラインを表示しようとした場合、ユーザーエクスペリエンスは非常に悪く、長い読み込み時間やスピナーが表示されるでしょう。Arweave上のデータは永続的であるため、元の形式でキャッシュすることで、トランザクションデータの取得をはるかに迅速かつ容易にすることができます。 + +以下のHTTPエンドポイントは、arweave.netトランザクションデータキャッシングサービスでキャッシュされたトランザクションデータにアクセスする方法です。 + +
+ +### キャッシュされたTXデータを取得 + +このメソッドは、指定されたトランザクションID(TX_ID)に関連付けられたトランザクションデータをキャッシュから取得します。 + + +`https://arweave.net/TX_ID` + +```js +const res = await axios.get(`https://arweave.net/sHqUBKFeS42-CMCvNqPR31yEP63qSJG3ImshfwzJJF8`) +console.log(res) +``` + +
+Click to view example result + +```json +{ + "data": { + "ticker": "ANT-PENDING", + "name": "pending", + "owner": "NlNd_PcajvxAkOweo7rZHJKiIJ7vW1WXt9vb6CzGmC0", + "controller": "NlNd_PcajvxAkOweo7rZHJKiIJ7vW1WXt9vb6CzGmC0", + "evolve": null, + "records": { + "@": "As-g0fqvO_ALZpSI8yKfCZaFtnmuwWasY83BQ520Duw" + }, + "balances": { + "NlNd_PcajvxAkOweo7rZHJKiIJ7vW1WXt9vb6CzGmC0": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "public,must-revalidate,max-age=2592000", + "content-length": "291", + "content-type": "application/json; charset=utf-8" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": [ + "xhr", + "http" + ], + "transformRequest": [ + null + ], + "transformResponse": [ + null + ], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "method": "get", + "url": "https://arweave.net/sHqUBKFeS42-CMCvNqPR31yEP63qSJG3ImshfwzJJF8" + }, + "request": {} +} + +``` +
+
+ +### 生のトランザクションを取得 + +一部の[トランザクションタイプ](manifests.md)のデータは、レンダリングのための異なるルールに従います。このエンドポイントは、生の未変換データを返します。 +`https://arweave.net/raw/TX_ID` + +```js +const result = await fetch('https://arweave.net/raw/rLyni34aYMmliemI8OjqtkE_JHHbFMb24YTQHGe9geo') + .then(res => res.json()) + console.log(JSON.stringify(result)) +``` + +
+Click to view example result + +```json +{ + "manifest": "arweave/paths", + "version": "0.1.0", + "index": { + "path": "index.html" + }, + "paths": { + "index.html": { + "id": "FOPrEoqqk184Bnk9KrnQ0MTZFOM1oXb0JZjJqhluv78" + } + } +} +``` + +
+
+ +各Arweaveピア/ノードも、しばしばレプリケートされたゲートウェイのHTTPエンドポイントを公開しています。ArweaveピアのHTTPエンドポイントについては、[こちら](/references/http-api.md)で読むことができます。 \ No newline at end of file diff --git a/docs/src/ja/concepts/vouch.md b/docs/src/ja/concepts/vouch.md new file mode 100644 index 0000000..7639af2 --- /dev/null +++ b/docs/src/ja/concepts/vouch.md @@ -0,0 +1,55 @@ +--- +locale: ja +--- +# Vouch + +## 概要 + +#### 動機 + +バウチングは、Sybil攻撃に対する分散型アプローチを提供します。Sybil攻撃とは、攻撃者が多数の擬似的なアイデンティティを作成してネットワークを侵害し、不相応に大きな影響を得ることです。 + +#### Vouchプロトコル + +Arweaveは、ANS-109 Vouch(アイデンティティの主張)の概念を導入しました。これは、特定のトランザクション形式といくつかのタグを使用して、誰でもpermaweb上の任意のArweaveアドレスのアイデンティティと人間性を「保証」できるようにする標準です。 + +ANS-109のような標準をpermawebに追加することで、Sybil攻撃や悪意のある行為者を最小限に抑え、permawebユーザーにとってより安全な体験を提供します。 + +#### VouchDAO +VouchDAOは、Vouch標準の上に構築されたコミュニティ主導の分散型検証レイヤーです。開発者は保証サービスを作成し、VouchDAOコミュニティのメンバーはこれらの検証サービスのどれが信頼できるかを投票で決定します。 + + + +## 仕組み +開発者は、特定の要件に基づいてユーザーのArweaveウォレットを保証するためのさまざまなVouchサービスを作成することができます。現在の例としては、180以上のArweaveアドレスを保証してきた最初の保証サービスであるTwitterサービスがあります。 + +VouchDAOスマートコントラクトの状態には`vouched`という属性があります。この状態は、ユーザーが確認されるたびに更新されます。`vouched`オブジェクトは、以下の形式で保証されたアドレスのリストを保存します。 + + +``` +VOUCH_USER_ADDRESS:[ + { + service:"SERVICE_ADDRESS_1" + transaction:"TX_ID" + }, + { + service:"SERVICE_ADDRESS_2" + transaction:"TX_ID" + } +] +``` + +確認されたユーザーには、そのウォレットがそのサービスによって保証されたことを示すために、ANS-109トークンが送信されます。 + +## ANS-109トランザクションフォーマット +| タグ名 | _オプション?_ | タグ値 | +|---|---|---| +|App-Name|必須|`Vouch`| +|Vouch-For|必須|このトランザクションで保証されるArweaveの`address`| +|App-Version|オプション|`0.1`| +|Verification-Method|オプション|その人のアイデンティティを確認する方法。例 - `Twitter`/`対面`/`Gmail`/`Facebook`| +|User-Identifier|オプション|確認方法に基づくユーザーの識別子。例 - `abhav@arweave.org`| + +## リソース +* [VouchDAO](https://vouch-dao.arweave.dev) +* [VouchDAOコントラクト](https://sonar.warp.cc/?#/app/contract/_z0ch80z_daDUFqC9jHjfOL8nekJcok4ZRkE_UesYsk) \ No newline at end of file diff --git a/docs/src/ja/getting-started/README.md b/docs/src/ja/getting-started/README.md new file mode 100644 index 0000000..9633eb4 --- /dev/null +++ b/docs/src/ja/getting-started/README.md @@ -0,0 +1,38 @@ +--- +locale: ja +--- + +# パーマウェブクックブック + +パーマウェブクックブックは、パーマウェブ上でアプリケーションを構築するための基本概念とリファレンスを提供する開発者向けリソースです。各概念とリファレンスは、パーマウェブ開発エコシステムの特定の側面に焦点を当てながら、追加の詳細や使用例を提供します。 + +## 開発者 + +ブロックチェーンに永遠に刻まれた過去と、無限の可能性に満ちた未来を持つArweave開発コミュニティへようこそ。一緒に分散型ウェブを構築しましょう! + +[もっと読む](welcome.md) + +## 貢献 + +クックブックは、新しいパーマウェブ開発者が貢献しやすいように設計されています。何かをする方法がわからなくても、クックブックへの貢献は学ぶための素晴らしい方法です! + +ここでオープンなイシューを確認してください。貢献ガイドラインはこちらです。クックブックに概念、ガイド、リファレンスが不足していると感じた場合は、イシューを追加してください。 + +[もっと読む](contributing.md) + +## クックブックの読み方 + +パーマウェブクックブックは、異なる目標を持つセクションに分かれています。 + +| セクション | 説明 | +| ------- | ----------- | +| コア概念 | 開発のために知っておくべきパーマウェブの基本要素 | +| ガイド | 様々な開発ツールについてのスナックサイズのガイド | +| リファレンス | よく必要とされるコードスニペットへの参照 | +| スターターキット | 短時間でパーマウェブ上の開発を開始できるフロントエンドフレームワークスターター | + +## クイックスタート + +これらは、あらゆる経験レベルの開発者がパーマウェブにコードを出荷するのを助けるための小さなガイドです。 + +- [Hello World (NodeJS)](quick-starts/hw-nodejs.md) \ No newline at end of file diff --git a/docs/src/ja/getting-started/contributing.md b/docs/src/ja/getting-started/contributing.md new file mode 100644 index 0000000..4d32c91 --- /dev/null +++ b/docs/src/ja/getting-started/contributing.md @@ -0,0 +1,59 @@ +--- +locale: ja +--- +# 貢献ワークフロー + +コミュニティの誰もがパーマウェブクックブックに貢献することを歓迎します。私たちは、質の高いリファレンスガイドを提供することを目指しており、小さなスナックサイズの情報の塊を集めています。以下は、誰でもこのプロジェクトに貢献できる手順を示したワークフローです。 + +## 知っておくべきことは? + +* GitとGithub - コンテンツをgithub.comに公開します。 +* Markdown - Markdownは、HTMLに変換できるテキストベースのマークアップ言語です。 +* Arweaveとパーマウェブ - 共有すべきパーマウェブについての知識を持っていること。 + +## 貢献のステップ + +![diagram](https://www.websequencediagrams.com/cgi-bin/cdraw?lz=dGl0bGUgQ29udHJpYnV0aW5nIHRvIFBlcm1hd2ViIENvb2tib29rCgoAGglvciAtPiBSZXBvIDogQ2hlY2sgT3V0IG9mIEZvcmsAFAVzaXRvcnkKbm90ZSBvdmVyAFYKb3IgOiBDcmVhdGUgTWFya2Rvd24gRG9jdW1lbnQAFxpvbW1pdCBDaGFuZ2VzAHQXUHVzaCBCcmFuY2gAYRljAHQGUHVsbCBSZXF1ZXMAWxphc3NpZ24gcmV2aWV3ZXIocykKUgAFBwCBdgsADQYAOhgAKAk6IEFwcHJvdmUgUFIAgjQXbWVyZ2UgdG8gbWFpbg&s=mscgen) + +## 助けが必要ですか? + +私たちの[Discordチャンネル](https://discord.gg/haCAX3shxF)に参加してメッセージを投稿してください。 + +## 作業のコミット + +このリポジトリでは[従来のコミット](https://www.conventionalcommits.org/en/v1.0.0/)を使用しています。 + +貢献を行うための一般的な流れ: + +1. GitHubでリポジトリをフォークする +2. プロジェクトを自分のマシンにクローンする +3. 自分のブランチに変更をコミットする +4. フォークに作業をプッシュする +5. 変更をレビューできるようにプルリクエストを提出する + +**注意**: プルリクエストを作成する前に、「アップストリーム」から最新のものをマージしてください! + +## スタイル + +いくつかの貢献者からのトーンやスタイルに関する提案です: + +::: tip +それらを書くことで、それぞれに適切なトーンを感じ取っています。 +コアコンセプトは、教科書のように中立的で客観的な声であるべきです。「これがArweaveの動作です」 +ガイドについては、より個人的な声を持つことが良いと思います。読者を「あなた」と呼び、共同の声で「次は…を見てみましょう」と話します。 +これは個人的な好みかもしれませんが、一般的に長い形式のガイドを追っているときは、このトーンがより支援的でアクセスしやすいと感じます。 +実際、これは他のエコシステムの人気のあるチュートリアルが書かれている声です。 +リソースについては、コアコンセプトと同じ声を持ち、簡潔さを重視します。 + +dmac +::: + +::: tip +概念的および参照データは、より冷たい科学的トーンを持つべきで、ガイドは支援的またはユーモラスなトーンを持つべきです。長い形式のコンテンツは、読者を引き込む必要がありますが、彼らをぼーっとさせないようにする必要があります。 + +Arch_Druid +::: + +## 貢献に関する詳細はリポジトリのスタイルガイドを参照してください + +[CONTRIBUTING](https://github.com/twilson63/permaweb-cookbook/blob/main/CONTRIBUTING.md) \ No newline at end of file diff --git a/docs/src/ja/getting-started/quick-starts/hw-cli.md b/docs/src/ja/getting-started/quick-starts/hw-cli.md new file mode 100644 index 0000000..792de5b --- /dev/null +++ b/docs/src/ja/getting-started/quick-starts/hw-cli.md @@ -0,0 +1,48 @@ +--- +locale: ja +--- +# Hello World (CLI) + + +このガイドでは、コマンドラインインターフェース(CLI)を使用して、パーマウェブにデータを取得する最も簡単な方法を説明します。 + +## 要件 + +- [NodeJS](https://nodejs.org) LTS 以上 + +## 説明 + +ターミナル/コンソールウィンドウを使用して、`hw-permaweb-1`という新しいフォルダーを作成します。 + +## セットアップ + +```sh +cd hw-permaweb-1 +npm init -y +npm install arweave ardrive-cli +``` + +## ウォレットを生成する + +```sh +npx -y @permaweb/wallet > ~/.demo-arweave-wallet.json +``` + +## ウェブページを作成する + +```sh +echo "

Hello Permaweb

" > index.html +``` + +## Ardrive CLIを使用してアップロードする + +```sh +# Create a Drive +FOLDER_ID=$(npx ardrive create-drive -n public -w ~/.demo-arweave-wallet.json --turbo | jq -r '.created[] | select(.type == "folder") | .entityId') +# Upload file +TX_ID=$(npx ardrive upload-file -l index.html --content-type text/html -w ~/.demo-arweave-wallet.json --turbo -F ${FOLDER_ID} | jq -r '.created[] | select(.type == "file +") | .dataTxId') +# open file from ar.io gateway +open https://g8way.io/${TX_ID} +``` + diff --git a/docs/src/ja/getting-started/quick-starts/hw-code.md b/docs/src/ja/getting-started/quick-starts/hw-code.md new file mode 100644 index 0000000..03502bd --- /dev/null +++ b/docs/src/ja/getting-started/quick-starts/hw-code.md @@ -0,0 +1,113 @@ +--- +locale: ja +--- + +# Hello World (コード) + +このガイドでは、数行のコードと[コマンドラインインターフェース (CLI)](./hw-cli.md)を使用して、静的なHTML、CSS、JavaScriptのウェブページをパーマウェブにアップロードする簡単な方法を説明します。 + +## 要件 + +- [NodeJS](https://nodejs.org) LTS以上 +- HTML、CSS、JavaScriptの基本的な知識 +- テキストエディタ(VS Code、Sublime、または同様のもの) + +## 説明 + +ターミナル/コンソールウィンドウを使用して、`hello-world`という新しいフォルダを作成します。 + +## セットアップ + +```sh +cd hello-world +npm init -y +mkdir src && cd src +touch index.js index.html style.css +``` + +次に、テキストエディタを開き、`hello-world`ディレクトリをインポートします。 + +## ウォレットの生成 + +```sh +node -e "require('arweave').init({}).wallets.generate().then(JSON.stringify).then(console.log.bind(console))" > wallet.json +``` + +:::info +wallet.jsonファイルは、`hello-world`フォルダのルートに配置する必要があり、`src`フォルダの中には置かないでください。 +::: + +## ウェブページの作成 + +このウェブページでは、基本的なHTML、CSS、JavaScriptを使用して、クリックするとヘッダーのテキストの色が変わるスタイル付きボタンを作成します。完成後、Irysと以前に生成したウォレットを使用して、完全に機能する静的かつ永続的なウェブページをArweaveにデプロイします。 + +次のコードブロックからコードをそれぞれのファイルに貼り付けてください: + +**index.html** + +
+Click to view HTML + +```html + + + + + + + + + Cookbook Hello World! + + + + +

Hello World!

+ + +``` + +
+
+ +**style.css** + +
+Click to view CSS + +```css +.button { + padding: "10px"; + background-color: #4caf50; +} +``` + +
+
+ +**index.js** + +
+Click to view JS + +```javascript +function changeColor() { + const header = document.getElementById("main"); + header.style.color === "" + ? (header.style.color = "red") + : (header.style.color = ""); +} +``` + +
+ +
+静的サイトをデプロイする準備が整ったら、コンソール/ターミナルで`open src/index.html`と入力して、すべてが正しく機能しているか確認できます。すべてが期待通りに動作している場合、Arweaveにデプロイする時が来ました! + +## permaweb-deployを使用したアップロード + +詳細はこちら: [https://github.com/permaweb/permaweb-deploy](https://github.com/permaweb/permaweb-deploy) + +## おめでとう!! + +わずか数コマンドと数行のコードで、Arweaveに静的サイトを公開しました! \ No newline at end of file diff --git a/docs/src/ja/getting-started/quick-starts/hw-no-code.md b/docs/src/ja/getting-started/quick-starts/hw-no-code.md new file mode 100644 index 0000000..bd97475 --- /dev/null +++ b/docs/src/ja/getting-started/quick-starts/hw-no-code.md @@ -0,0 +1,28 @@ +--- +locale: ja +--- +# Hello World (ノーコード) + +このクイックスタートでは、ノーコードで画像をパーマウェブにアップロードします! + +## 要件 + +* コンピュータ +* インターネット +* モダンウェブブラウザ + +## ウォレットを作成 + +[https://arweave.app/add](https://arweave.app/add) または [https://arconnect.io](https://arconnect.io) + +## データをArweaveに送信 + +[https://hello_cookbook.arweave.dev](https://hello_cookbook.arweave.dev)にアクセスします。 + +データを入力し、公開をクリックし、ウォレットを接続すると「バン!」です。 + +## おめでとうございます!! + +あなたはゼロコードでArweaveにデータを公開しました。 + +> プロジェクトをチェックアウトするには -> https://github.com/twilson63/pw-no-code-hello \ No newline at end of file diff --git a/docs/src/ja/getting-started/quick-starts/hw-nodejs.md b/docs/src/ja/getting-started/quick-starts/hw-nodejs.md new file mode 100644 index 0000000..84e3855 --- /dev/null +++ b/docs/src/ja/getting-started/quick-starts/hw-nodejs.md @@ -0,0 +1,97 @@ +--- +locale: ja +--- +# Hello World (NodeJS) + +このガイドでは、`arweave-js`と`irys`を使用して、データをパーマウェブにアップロードする最も簡単な方法を説明します。 + +Arweave 2.6では、ブロックごとに1000アイテムしか許可されていないため、ゲートウェイに直接投稿する(例:`arweave-js`を使用する)ことはあまり一般的ではないでしょう。 + +## 要件 + +- [NodeJS](https://nodejs.org) LTS以上 + +## 説明 + +ターミナル/コンソールウィンドウを使用して、`hw-nodejs`という新しいフォルダを作成します。 + +## セットアップ + +```sh +cd hw-nodejs +npm init -y +npm install arweave ardrive-cli +``` + +## ウォレットの生成 + +```sh +npx -y @permaweb/wallet > ~/.demo-arweave-wallet.json +``` + +## Ardrive Turboを使用したアップロード + +現在、Irysのノード2では、100 KiB未満のアップロードが無料です。 + + +```js:no-line-numbers +import Irys from "@irys/sdk"; +import fs from "fs"; + +const jwk = JSON.parse(fs.readFileSync("wallet.json").toString()); +const url = "https://node2.irys.xyz"; +const token = "arweave"; + +const irys = new Irys({ + url, // URL of the node you want to connect to + token, // Token used for payment and signing + jwk, // Arweave wallet +}); + +const dataToUpload = "GM world."; + +try { + const receipt = await irys.upload(dataToUpload); + console.log(`Data uploaded ==> https://arweave.net/${receipt.id}`); +} catch (e) { + console.log("Error uploading data ", e); +} +``` + +## ArweaveJSを使用したアップロード + +最新バージョンの`nodejs`を実行している場合、この`arweavejs`スクリプトはそのまま動作します。その他のバージョンでは、`--experimental-fetch`フラグを使用する必要があるかもしれません。 + + +```js:no-line-numbers +import Arweave from "arweave"; +import fs from "fs"; + +// load the JWK wallet key file from disk +const jwk = JSON.parse(fs.readFileSync('./wallet.json').toString()); + +// initialize arweave +const arweave = Arweave.init({ + host: "arweave.net", + port: 443, + protocol: "https", +}); + +const tx = await arweave.createTransaction( + { + data: "Hello world!", + }, + jwk +); + +await arweave.transactions.sign(tx, jwk); + +arweave.transactions.post(tx).then(console.log).catch(console.log); +console.log(`https://arweave.net/${tx.id}`); +``` + +## Resources + +- [Irys SDK](https://github.com/irys-xyz/js-sdk) +- [Arweave JS SDK](https://github.com/ArweaveTeam/arweave-js) +- [Irys Docs: Free Uploads](http://docs.irys.xyz/faqs/dev-faq#does-irys-offer-free-uploads) diff --git a/docs/src/ja/getting-started/welcome.md b/docs/src/ja/getting-started/welcome.md new file mode 100644 index 0000000..e46a6ee --- /dev/null +++ b/docs/src/ja/getting-started/welcome.md @@ -0,0 +1,21 @@ +--- +locale: ja +--- +# パーマウェブでの開発 + +## パーマウェブへようこそ + +Arweaveプロトコルに基づいて構築されたパーマウェブ上でアプリケーションを作成することは、従来のウェブアプリケーションを構築するのと似ていますが、いくつかの重要な違いがあります。 + +一つの大きな違いは、データがパーマウェブ上に永久に保存されることです。名前が示すように、これは集中型サーバーではなく、データが一度パーマウェブにアップロードされると、削除や変更ができないことを意味します。これは、サプライチェーン管理や投票システムなど、改ざん防止のデータ保存が必要なアプリケーションにとって有益です。 + +もう一つの違いは、パーマウェブが分散型であることです。つまり、中央集権的な管理ポイントや障害点が存在しません。これにより、アプリケーションのセキュリティと信頼性が向上します。 + +さらに、パーマウェブでは、データのストレージに対して支払うためにARと呼ばれるユニークなトークンを使用しています。これにより、開発者はアプリケーションにARを統合し、支払いを処理する方法を考慮する必要があるため、アプリケーション開発に新たな複雑さが加わる可能性があります。 + +全体として、パーマウェブ上でのアプリケーション作成の経験は挑戦的かもしれませんが、従来のウェブ開発に比べてユニークな利点を提供するため、やりがいもあります。 + +## ハローワールド + +* [Hello World (ノーコード)](./quick-starts/hw-no-code.md) +* [Hello World (CLI)](./quick-starts/hw-cli.md) \ No newline at end of file diff --git a/docs/src/ja/guides/README.md b/docs/src/ja/guides/README.md new file mode 100755 index 0000000..49e7d71 --- /dev/null +++ b/docs/src/ja/guides/README.md @@ -0,0 +1,28 @@ +--- +locale: ja +title: Permaweb Cookbook - ガイド +--- + +# ガイド + +Permawebの構成要素に関するスナックサイズのガイド + +- [ArProfile](arprofile.md) +- [DNS統合](dns-integration/server-side.md) + - [サーバーサイド](dns-integration/server-side.md) + - [Spheron](dns-integration/spheron.md) +- [アプリのデプロイ](deployment/index.md) + - [arkb](deployment/arkb.md) + - [github-action](deployment/github-action.md) +- [PathManifestsのデプロイ](deploying-manifests/deployingManifests.md) + - [arweave.app](deploying-manifests/arweave-app.md) + - [ardrive](deploying-manifests/ardrive.md) + - [Akord](deploying-manifests/akord.md) +- [PSTのデプロイ](deploying-psts.md) +- [GraphQL](querying-arweave/queryingArweave.md) + - [ArDB](querying-arweave/ardb.md) + - [ar-gql](querying-arweave/ar-gql.md) + - [検索サービス](querying-arweave/search-indexing-service.md) +- [テスト](testing/arlocal.md) + +> Permawebのガイドが欠けていると思いますか? [Github](https://github.com/twilson63/permaweb-cookbook/issues)で問題を作成するか、[貢献](../getting-started/contributing.md)を検討してください。 \ No newline at end of file diff --git a/docs/src/ja/guides/arprofile.md b/docs/src/ja/guides/arprofile.md new file mode 100644 index 0000000..df4683c --- /dev/null +++ b/docs/src/ja/guides/arprofile.md @@ -0,0 +1,181 @@ +--- +locale: ja +--- +# ArProfile + +[ArProfile](https://arprofile.arweave.dev) は、オープンデータプロトコル [`Account`](https://docs.arprofile.org/#/?id=data-protocol) に依存する Arweave ネイティブの DID です。 + +[`arweave-account`](https://www.npmjs.com/package/arweave-account) は、ウェブアプリやバックエンド(nodejs)など、コードベースに ArProfile を簡単に統合するための npm パッケージです。 + +[完全なドキュメントはこちら](https://docs.arprofile.org)を参照してください。 + +## 目的 + +基本的なアカウントプロトコルは、ユーザー間の社会的相互作用に必要な基本的ニーズを満たすことを目的としています:アバター、一意のハンドル、名前、およびプロフィール。さらに、Twitter、Discord、Github、Instagram、Facebook などの著名なソーシャルネットワークからアカウントを追加する機能も含まれています。 + +## クイックインテグレーション + +[permadapp](/concepts/permawebApplications.html) プロフィールビューワーは、tx [`5OHoPfYucLPTgOvJGgnL0Cg0Ktl-ZDaiTjQo_2B3tBg`](https://viewblock.io/arweave/tx/5OHoPfYucLPTgOvJGgnL0Cg0Ktl-ZDaiTjQo_2B3tBg) で入手可能です。 + +任意の ArProfile を ` +``` + +Result: + + + +# コードベースへの統合 + +[`arweave-account`](https://www.npmjs.com/package/arweave-account) は、ウェブアプリやバックエンド(nodejs)など、コードベースに ArProfile を簡単に統合するための npm パッケージです。 + +## インストール + +npm を使用してパッケージを追加します: + + + +```console +npm install arweave-account +``` + + + + +```console +yarn add arweave-account +``` + + + + +## Using ArProfile +```js:no-line-numbers +import Account from 'arweave-account' +const account = new Account(opts); +``` + +Optional argument options can be passed into the constructor. Here is the default options: +```js:no-line-numbers +const opts = { + cacheIsActivated: true, + cacheSize: 100, + cacheTime: 60 +}; +``` + +::: tip +キャッシュは、関連するプロフィール情報をローカルストレージに保存するため、将来のデータ要求に対してより迅速に応答できます。保存される期間は、渡されたオプションで指定します。 +::: + +#### アドレスによるプロフィールの取得 +Arweave アドレスを使用してアカウント情報を取得するには、非同期関数内でユーザーアドレスを `get` 関数に渡します。 + + +```js:no-line-numbers +await account.get("aIUmY9Iy4qoW3HOikTy6aJww-mM4Y-CUJ7mXoPdzdog") + +{ + "txid": "NPJJoq-9EwUeAce_bSbSyqICaGs4_7Hg6VxCyoCY8UQ", + "addr": "aIUmY9Iy4qoW3HOikTy6aJww-mM4Y-CUJ7mXoPdzdog", + "handle": "@cromatikap#aIUdog", + "profile": { + "handleName": "cromatikap", + "avatar": "xqjVvn9b8hmtDJhfVw80OZzAsn-ErpWbaFCPZWG5vKI", + "avatarURL": "https://arweave.net/xqjVvn9b8hmtDJhfVw80OZzAsn-ErpWbaFCPZWG5vKI", + "banner": "ar://a0ieiziq2JkYhWamlrUCHxrGYnHWUAMcONxRmfkWt-k", + "bannerURL": "https://arweave.net/a0ieiziq2JkYhWamlrUCHxrGYnHWUAMcONxRmfkWt-k", + "name": "Axel", + "bio": "Founder of Metaweave.xyz\nI love dogs", + "email": "", + "links": { + "twitter": "cromatikap", + "github": "cromatikap", + "instagram": "cromatikap", + "discord": "cromatikap#6039" + }, + "wallets": {} + } +} +``` + +#### ハンドルによるプロフィールの取得 +Arweave アドレスは複数の ArProfile にリンクできます。既存の ArProfile ハンドルを使用してアカウント情報を取得するには、非同期関数内でユーザーハンドルを `search` 関数に渡します。 + +```js:no-line-numbers +await account.search("cromatikap") + +[ + { + "txid": "H0qHXb2mC3Y1zRZcSczZ-fp4UytCxSJDhO7j9DP2wQE", + "addr": "Y4P1UzeAgQNU169vhYo3Cdx4-gevKvaBWCfkoG-ajU8", + "handle": "@cromatikap#Y4PjU8", + "profile": { + "handleName": "cromatikap", + "avatar": "ar://xpuHFNujK8K6_1SHRn4KPLxkHZKfIryEjXIDYkKwRtE", + "avatarURL": "https://arweave.net/xpuHFNujK8K6_1SHRn4KPLxkHZKfIryEjXIDYkKwRtE", + "banner": "ar://a0ieiziq2JkYhWamlrUCHxrGYnHWUAMcONxRmfkWt-k", + "bannerURL": "https://arweave.net/a0ieiziq2JkYhWamlrUCHxrGYnHWUAMcONxRmfkWt-k", + "name": "cromatikap on the go", + "bio": "mobile account", + "email": "", + "links": {}, + "wallets": {} + } + }, + {...}, // more profiles + {...} +] +``` + +#### ユニークハンドルによるプロフィールの取得 +Arweave アドレスを使用してアカウント情報を取得するには、非同期関数内でユーザーハンドルとユニークハンドルを `search` 関数に渡します。 + +```js:no-line-numbers +await account.search("cromatikap#aIUdog") + +{ + "txid": "_DGURgOAih5p2vTyaEu9_bBDpZv81rctPO2q9cpOFS0", + "addr": "HDCwh7xJcIK23vx1blxysTnUpqy1PEzAb5Am84ZdERA", + "handle": "@cromatikap#HDCERA", + "profile": { + "handleName": "cromatikap", + "avatar": "ar://OrG-ZG2WN3wdcwvpjz1ihPe4MI24QBJUpsJGIdL85wA", + "avatarURL": "https://arweave.net/OrG-ZG2WN3wdcwvpjz1ihPe4MI24QBJUpsJGIdL85wA", + "banner": "ar://a0ieiziq2JkYhWamlrUCHxrGYnHWUAMcONxRmfkWt-k", + "bannerURL": "https://arweave.net/a0ieiziq2JkYhWamlrUCHxrGYnHWUAMcONxRmfkWt-k", + "name": "Axel", + "bio": "test account by cromatikap\nUPDATE", + "email": "", + "links": { + "github": "cromatikap", + "twitter": "cromatikap" + }, + "wallets": {} + } +} +``` + +## まとめ +実装に必要なコードはわずか 3 行で、ArProfile はアプリケーションにアバター、バイオ、ソーシャルリンクなどの追加の Arweave ユーザー情報を追加するための簡単な方法です。 \ No newline at end of file diff --git a/docs/src/ja/guides/atomic-tokens/intro.md b/docs/src/ja/guides/atomic-tokens/intro.md new file mode 100644 index 0000000..5648d15 --- /dev/null +++ b/docs/src/ja/guides/atomic-tokens/intro.md @@ -0,0 +1,87 @@ +--- +locale: ja +--- +# アトミックトークン + +> **⚠️ 廃止通知** +> +> この文書は廃止されており、古い情報が含まれている可能性があります。 + +## アトミックトークンとは? + +[この概念をチェックしてください](../../concepts/atomic-tokens.md) + +## アトミックトークンの作成 + +::: info INFORMATION +この例では、ネットワーク上に既に公開されているSWTコントラクトソースを使用しています。[x0ojRwrcHBmZP20Y4SY0mgusMRx-IYTjg5W8c3UFoNs](https://sonar.warp.cc/#/app/source/x0ojRwrcHBmZP20Y4SY0mgusMRx-IYTjg5W8c3UFoNs#) - +::: + +example.ts + +```ts +import Irys from '@irys/sdk' +import { WarpFactory } from 'warp-contracts' + +async function main() { + const wallet = JSON.parse(await import('fs') + .then(fs => fs.readFileSync('./wallet.json', 'utf-8'))) + + const irys = new Irys({ 'https://node2.irys.xyz', 'arweave', wallet }) + const warp = WarpFactory.forMainnet() + + const data = `

Hello Permaweb!

` + const tags = [ + { name: 'Content-Type', value: 'text/html' }, + // ANS-110 Tags + { name: 'Type', value: 'web-page' }, + { name: 'Title', value: 'My first permaweb page' }, + { name: 'Description', value: 'First permaweb page by Anon' }, + { name: 'Topic:Noob', value: 'Noob' }, + // SmartWeave Contract + { name: 'App-Name', value: 'SmartWeaveContract' }, + { name: 'App-Version', value: '0.3.0' }, + { name: 'Contract-Src', value: 'x0ojRwrcHBmZP20Y4SY0mgusMRx-IYTjg5W8c3UFoNs' }, + { + name: 'Init-State', value: JSON.stringify({ + balances: { + 'cHB6D8oNeXxbQCsKcmOyjUX3UkL8cc3FbJmzbaj3-Nc': 1000000 + }, + name: 'AtomicToken', + ticker: 'ATOMIC-TOKEN', + pairs: [], + creator: 'cHB6D8oNeXxbQCsKcmOyjUX3UkL8cc3FbJmzbaj3-Nc', + settings: [['isTradeable', true]] + }) + } + ] + + const { id } = await irys.upload(data, { tags }) + await warp.createContract.register(id, 'node2') + console.log('Atomic Token: ', id) +} + +main() +``` + +この例では、データアイテムを作成し、それをバンドラーネットワークサービスにアップロードしています。その後、Warpシーケンサーに契約を登録します。バンドラーを使用してデータアイテムを公開し、Warpシーケンサーに登録することで、私たちのデータはすぐにゲートウェイサービスで利用可能になり、私たちの契約はすぐにインタラクションを受け入れることができるようになります。 + +## 例を実行 + +```sh +npm install @irys/sdk warp-contracts +npm install typescript ts-node +npx ts-node example.ts +``` + +::: info INFORMATION +[ANS-110](https://github.com/ArweaveTeam/arweave-standards/blob/master/ans/ANS-110.md) は、Permawebアプリケーションエコシステムとのコンポーザビリティを可能にするための資産発見仕様です。 +::: + +## まとめ + +これはアトミックアセットをデプロイするシンプルな例です。より詳細な例については、[https://atomic-assets.arweave.dev](https://atomic-assets.arweave.dev)をチェックしてください。 + +## トークンの操作 + +SmartWeaveコントラクトは、ArweaveネットワークのネイティブコインであるARを保持することができません。ARは、Arweaveネットワーク上のデータのストレージを購入するために使用され、ソースウォレットからターゲットウォレットに転送することができますが、SmartWeaveコントラクト内に保持することはできません。 \ No newline at end of file diff --git a/docs/src/ja/guides/deploying-manifests/akord.md b/docs/src/ja/guides/deploying-manifests/akord.md new file mode 100644 index 0000000..6fd6373 --- /dev/null +++ b/docs/src/ja/guides/deploying-manifests/akord.md @@ -0,0 +1,174 @@ +--- +locale: ja +--- +## Akord CLIを使用して + +[Akord CLI](https://github.com/Akord-com/akord-cli)を使用して、マニフェストを生成できます。 + +### 開始する + +> Requires NodeJS - https://nodejs.org + + + + +```console +npm install -g @akord/akord-cli +``` + + + + +```console +yarn global add @akord/akord-cli +``` + + + + +### Akordにログイン (アカウントを[こちらで作成](https://v2.akord.com/signup)できます) +CLIをインストールしたら、プロンプトに従ってAkordのユーザー名とパスワードで認証してログインします。 + +```console +akord login {your_email_address} +``` + +### ボールトを選択 +マニフェストを生成するためには、公開ボールトのボールトIDが必要です。ボールトをリストするには: + +```console +akord vault:list +``` + +### マニフェストを生成 +ログインし、ボールトIDが取得できたら、ファイルとコンテンツのマニフェストを生成できます。\ +ボールトに「index.html」ファイルがない場合は、カスタムインデックスを提供できます: + +```console +akord manifest:generate {vaultId} --index "my-custom-index.html" +``` + +マニフェストを生成すると、ボールト内に「manifest.json」というファイルが表示されます。このファイルがArweaveブロックチェーン上で確認され、ゲートウェイによって伝播されると、次のリンクであなたの公開ボールトにアクセスできるようになります: https://arweave.net/{uri} + +## AkordJSを使用して + +代わりに、[AkordJS](https://github.com/Akord-com/akord-js)パッケージを使用してマニフェストを生成できます。 + +### 開始する前に + +> Requires NodeJS - https://nodejs.org + + + + +```console +npm install @akord/akord-js +``` + + + + +```console +yarn add @akord/akord-js +``` + + + + +### マニフェストを生成しよう + +### ボールト内のファイルから自動的にマニフェストを生成 + +```js +import { Akord, Auth } from '@akord/akord-js' + +// First, let's initialize Akord instance +// In order to use AkordJS, you first need an Akord account. +// Sign up for Akord here: https://v2.akord.com/signup +const { wallet } = await Auth.signIn(email, password); +const akord = await Akord.init(wallet); + +// Let's create a public vault to contain our files +const { vaultId } = await akord.vault.create("My hello world app", { public: true }); + +// Let's upload a Hello world html file +const { stackId } = await akord.stack.create( + vaultId, + ["

Hello World

"], + { name: "index.html", mimeType: "text/html" } +); + +// Let's generate a manifest +const { uri } = await akord.manifest.generate(vaultId); +// In few minutes, you will be able to access your manifest here: https://arweave.net/{uri} +``` + + +### Upload your own manifest file manually +```js +import { Akord, Auth } from '@akord/akord-js' + +// First, let's initialize Akord instance +// In order to use AkordJS, you first need an Akord account. +// Sign up for Akord here: https://v2.akord.com/signup +const { wallet } = await Auth.signIn(email, password); +const akord = await Akord.init(wallet); + +// let's define our manifest +const manifest = { + "manifest": "arweave/paths", + "version": "0.2.0", + "index": { + "path": "index.html" + }, + "fallback": { + "id": "cG7Hdi_iTQPoEYgQJFqJ8NMpN4KoZ-vH_j7pG4iP7NI" + } + "paths": { + "index.html": { + "id": "cG7Hdi_iTQPoEYgQJFqJ8NMpN4KoZ-vH_j7pG4iP7NI" + }, + "js/app.js": { + "id": "fZ4d7bkCAUiXSfo3zFsPiQvpLVKVtXUKB6kiLNt2XVQ" + }, + "css/style.css": { + "id": "fZ4d7bkCAUiXSfo3zFsPiQvpLVKVtXUKB6kiLNt2XVQ" + }, + "css/mobile.css": { + "id": "fZ4d7bkCAUiXSfo3zFsPiQvpLVKVtXUKB6kiLNt2XVQ" + }, + "assets/img/logo.png": { + "id": "QYWh-QsozsYu2wor0ZygI5Zoa_fRYFc8_X1RkYmw_fU" + }, + "assets/img/icon.png": { + "id": "0543SMRGYuGKTaqLzmpOyK4AxAB96Fra2guHzYxjRGo" + } + } +}; + +// Let's create a public vault to contain the manifest +const { vaultId } = await akord.vault.create("My manifest", { public: true }); + +const { uri } = await akord.manifest.generate(vaultId, manifest); +// In few minutes, you will be able to access your manifest here: https://arweave.net/{uri} +``` + +### おめでとうございます! + +トランザクションがArweaveネットワークで受け入れられると(平均して5〜15分かかります)、\ +ブラウザで次のURLにアクセスできます。{uri}をユニークなマニフェストトランザクションIDに置き換えてください: https://arweave.net/{uri} + +## Akordウェブアプリを使用して + +[ウェブアプリ](https://v2.akord.com/login)からも、公開の永久ボールト内で「+」ボタンから「マニフェストを追加」を選択することで、マニフェストを作成しボールトに追加することができます。 + +このアクションにより、ボールト内のすべてのファイルとフォルダのマニフェストが自動的に作成されます。 + +マニフェストをダウンロードし、ボールト内のタイトルをクリックしてメディアギャラリーで表示できます。 + +それは非常に簡単です! + +## リソースとさらなる情報 +- [Akordボールト内でのマニフェストの生成](https://docs.akord.com/nft-projects/get-the-arweave-urls) +- [パーマウェブへのウェブサイトの公開](https://docs.akord.com/api-and-dev-tools/learn/publishing-a-website) +- [AkordJSマニフェストモジュール](https://github.com/Akord-com/akord-js?tab=readme-ov-file#manifest) \ No newline at end of file diff --git a/docs/src/ja/guides/deploying-manifests/ardrive.md b/docs/src/ja/guides/deploying-manifests/ardrive.md new file mode 100644 index 0000000..5c4c9e1 --- /dev/null +++ b/docs/src/ja/guides/deploying-manifests/ardrive.md @@ -0,0 +1,13 @@ +### ArDrive + +--- + +`ardrive create-manifest` コマンドを使用して、フォルダーまたはフォルダーのグループのマニフェストを作成できます。このコマンドは [ArDrive CLI](https://github.com/ardriveapp/ardrive-cli) に含まれています。 + +さらに詳しい情報: [ArDrive CLI ドキュメント](https://github.com/ardriveapp/ardrive-cli) + +--- + +また、[ArDrive](https://ardrive.io) ウェブアプリを使用して、ドライブ内で「新規」→「マニフェストを作成」を選択することでマニフェストを作成することもできます。 + +![ArDrive ウェブアプリ マニフェスト](~@source/images/ardrive-manifests.png) \ No newline at end of file diff --git a/docs/src/ja/guides/deploying-manifests/arseeding-js.md b/docs/src/ja/guides/deploying-manifests/arseeding-js.md new file mode 100644 index 0000000..a597d2b --- /dev/null +++ b/docs/src/ja/guides/deploying-manifests/arseeding-js.md @@ -0,0 +1,83 @@ +--- +locale: ja +--- +### Arseeding JS SDK + +--- + +*Arseedingのマニフェスト機能を簡単に使用するためのガイドです。* + +## Getting Started + +### SDKのインストール +```bash +npm i arseeding-js +``` + +`demo.js`というファイルを作成し、以下のコードをコピーします。 + +```jsx +import {uploadFolderAndPay} from "arseeding-js/cjs/uploadFolder"; + +const run = async () => { + const path = 'Your Folder path' + const priv = 'YOUR PRIVATE KEY' + const arseedUrl = 'https://arseed.web3infra.dev' + const tag = '' // everpay supported all token tag (chainType-symbol-id) + const indexFile = '' + + const res = await uploadFolderAndPay(path,priv,arseedUrl,tag, indexFile) + console.log(res) +} + +// review manifest Data +curl --location --request GET 'https://arseed.web3infra.dev/{res.maniId}' +``` + + +#### 設定メモ: + +- `YOUR PRIVATE KEY` を使用してECCキーを設定します。プライベートキーに対応するウォレットにeverPayの資産があることを確認してください。 +- `arseedUrl` はArseedingバックエンドサービスのURLです。ここでは、permadaoによって提供される公開のArseedingサービス(https://arseed.web3infra.dev)を使用します。 +- `payUrl` は設定が必要なeverPayサービスのURLです: [https://api.everpay.io](https://api.everpay.io/) +- `path` はアップロードしたいフォルダーのパスです。例えば、静的ウェブサイトをデプロイする場合、フロントエンドプロジェクトはプロジェクトがコンパイルされた後にビルドまたはdistフォルダーを生成しますので、そのフォルダーのパスを選択します。 +- `tag` は選択する支払い `トークンタグ` です。MetaMaskアドレスがeverPayに保有している場合、usdcの場合、[getTokenTagByEver('usdc')](https://web3infra.dev/docs/arseeding/sdk/arseeding-js/getTokenTag)を介してusdcタグを取得できます。別のトークンで支払いを希望する場合は、トークン名を入力して指定されたタグを取得してください。 +- `indexFile` はオプションです。指定しない場合、`index.html`(存在する場合)またはnullがデフォルト値として使用されます。フォルダーがフロントエンドプロジェクトのビルドフォルダーである場合、indexFileを指定する必要はありません。 + +設定を準備した後、`uploadFolderAndPay(path,priv,url,payCurrency)`を呼び出して、マニフェストを介してフォルダー内のすべてのファイルをweb3infraのArseedingノードにアップロードします。 + +```bash +node demo.js +``` + +return: + +```tsx +{ + fee: '0.004218', + maniId: 'EHeDa8b428L38b972qyHI87YELuZKue1jDI_JWC-aGE', + everHash:[ + '0x46744320be6529c48bf18c348fa181facef3d9d6d920a24687dc9964ba3ead0a' + ] +} +``` + +## Download data-## データアクセスページのダウンロード + +`maniId` は戻り値の中に見つけることができます。上記のmaniIdは `EHeDa8b428L38b972qyHI87YELuZKue1jDI_JWC-aGE` です。 + +このチュートリアルでは、Docusaurusフロントエンドプロジェクトをアップロードしており、そのプロジェクト内で `yarn build` を実行すると、アップロードしたビルドフォルダーが生成されます。今、`maniId`を介してサイトにアクセスできます! + +ブラウザに次のように入力します: + + +```bash +https://arseed.web3infra.dev/EHeDa8b428L38b972qyHI87YELuZKue1jDI_JWC-aGE +``` +このウェブサイトにアクセスできるようになり、永久に利用可能です! + +--- + +参考文献とさらなる学習: +* [Arseeding Documentation](https://web3infra.dev/docs/arseeding/introduction/lightNode) +* Arseedingのアップロードマニフェストチュートリアルは[こちら](https://web3infra.dev/docs/arseeding/sdk/arseeding-js/manifest/)を参照してください。 \ No newline at end of file diff --git a/docs/src/ja/guides/deploying-manifests/arweave-app.md b/docs/src/ja/guides/deploying-manifests/arweave-app.md new file mode 100644 index 0000000..bb3cd05 --- /dev/null +++ b/docs/src/ja/guides/deploying-manifests/arweave-app.md @@ -0,0 +1,14 @@ +--- +locale: ja +--- +### Arweave.app + +--- + +[Arweave.app](http://Arweave.app) を通じてディレクトリをアップロードすると、ディレクトリ内のすべてのファイルに対して自動的にマニフェストが作成されます。 + +![ArweaveApp Manifest Upload](~@source/images/arweaveapp-manifest.png) + +または、自分でマニフェストファイルを手動でアップロードし、以下のタグを追加してトランザクションを送信することもできます。 + +![ArweaveApp Manifest Tags](~@source/images/arweaveapp-tags.png) \ No newline at end of file diff --git a/docs/src/ja/guides/deploying-manifests/deployingManifests.md b/docs/src/ja/guides/deploying-manifests/deployingManifests.md new file mode 100644 index 0000000..0873b0f --- /dev/null +++ b/docs/src/ja/guides/deploying-manifests/deployingManifests.md @@ -0,0 +1,12 @@ +--- +locale: ja +--- +# Creating and Deploying Manifests + +--- + +このガイドでは、パスマニフェストを手動で作成し、デプロイする方法を説明します。 + +パスマニフェストのコアコンセプトページには、マニフェストとは何か、そしてそれがプロジェクトにとってなぜ有用である可能性があるのかについての詳細が記載されています。 + +このガイドに従ってパスマニフェストをデプロイする場合、[コアコンセプト](https://cookbook.arweave.dev/concepts/manifests.html)ページに示されたマニフェストの構造に従う必要があります。 \ No newline at end of file diff --git a/docs/src/ja/guides/deploying-manifests/turbo.md b/docs/src/ja/guides/deploying-manifests/turbo.md new file mode 100644 index 0000000..49879f5 --- /dev/null +++ b/docs/src/ja/guides/deploying-manifests/turbo.md @@ -0,0 +1,124 @@ +--- +locale: ja +--- +# Turboを使ったマニフェストのデプロイ + +## Turboのインストール + +> Requires NodeJS - https://nodejs.org + + + + +```console +npm install @ardrive/turbo-sdk +``` + + + + +```console +yarn add @ardrive/turbo-sdk +``` + + + + +## フォルダのアップロード + +デフォルトでは、Turbo SDKの`uploadFolder`メソッドは、フォルダ用のマニフェストを生成してデプロイします。`index`および`fallback`属性は、それぞれアップロードされたフォルダ内の`index.html`および`404.html`ファイルに設定されますが、他のファイルが指定された場合はそれに従います。 + +`uploadFolder`メソッドは、マニフェストの完全なJSONと、マニフェストアップロードのトランザクションIDの両方を返します。 + +```javascript +import { TurboFactory } from "@ardrive/turbo-sdk"; +import fs from "fs"; + +const jwk = fs.readFileSync("./KeyFile.json"); +const turbo = TurboFactory.authenticated({ privateKey: JSON.parse(jwk) }); + +const { manifest, fileResponses, manifestResponse } = await turbo.uploadFolder({ + folderPath, + dataItemOpts: { + // optional + tags: [ + { + // User defined content type will overwrite file content type + name: "Content-Type", + value: "text/plain", + }, + { + name: "My-Custom-Tag", + value: "my-custom-value", + }, + ], + // no timeout or AbortSignal provided + }, + manifestOptions: { + // optional + indexFile: "custom-index.html", + fallbackFile: "custom-fallback.html", + disableManifests: false, + }, +}); +``` +## マニフェストを手動で作成およびアップロード + +マニフェストは手動で作成してアップロードすることもできます。マニフェストは特定のスキーマを持つJSONオブジェクトで、`Content-Type`タグ`application/x.arweave-manifest+json`を使用してアップロードされます。 + +```js +import { TurboFactory } from "@ardrive/turbo-sdk"; +import { Readable } from 'stream'; + + +const jwk = fs.readFileSync('./KeyFile.json'); +const turbo = TurboFactory.authenticated({ privateKey: JSON.parse(jwk) }); + +// define the manifest +const manifest = { + "manifest": "arweave/paths", + "version": "0.2.0", + "index": { + "path": "index.html" + }, + "fallback": { + "id": "-u47dfkUE2k9vETNXTqCdFRVLS5NfpZfODZ5ZKItiRY" + } + "paths": { + "404.html": { + "id": "-u47dfkUE2k9vETNXTqCdFRVLS5NfpZfODZ5ZKItiRY" + }, + "index.html": { + "id": "dYD2PqQyFpKj40bhyTkBCEtYnxf-GfQpRMFClbCiHF4" + }, + "last.html": { + "id": "YjpkqFPUamchyDYpJsGUmge8sKczqTKkX2hWbIL9qBw" + }, + "stuff.html": { + "id": "pqnejz6_iHB-KYdTB4zC_ALEX5Ox-Rpt4X_Yr3JZywk" + }, + "test.html": { + "id": "hfc763dACTF9VvxDAX4YkF9QNzh5eO1NZpSCAetsrXE" + } + } +}; + +// upload the manifest +const manifestString = JSON.stringify(manifest); + +const uploadResult = await turbo.uploadFile({ + fileStreamFactory: () => Readable.from(Buffer.from(manifestString)), + fileSizeFactory: () => Buffer.byteLength(manifestString), + signal: AbortSignal.timeout(10_000), //10 second timeout + dataItemOpts: { + tags: [ + { + name: 'Content-Type', + value: 'application/x.arweave-manifest+json', + } + ], + }, +}); + +console.log(uploadResult.id) // log the manifest transaction id to the console +``` \ No newline at end of file diff --git a/docs/src/ja/guides/deploying-psts.md b/docs/src/ja/guides/deploying-psts.md new file mode 100644 index 0000000..c4ca720 --- /dev/null +++ b/docs/src/ja/guides/deploying-psts.md @@ -0,0 +1,236 @@ +--- +locale: ja +--- +# PSTの作成とデプロイ + +### **前提条件** + +--- + +PSTを作成する前に、**NodeJS/NPM**をインストールしておく必要があります。 + +### **始めに** + +--- + +SmartWeaveコントラクトは、以下の2つの部分に分かれています。 + +- **コントラクト**(トークンの背後にある実際のロジック) +- **初期状態**(トークンに設定したい設定や構成) + +このガイドでは、両方を作成します。 + +**ローカル環境の設定** + +次のコマンドを実行します。 + +Run `npm install arweave arlocal warp-contracts`. + +This will provide functions to create and deploy a PST. + +### **Configuring The Contract** + +--- + +The PST requires some initial state setup before deployment, e.g. the token name, and token quantity. + +Create a configuration file that looks something like this: + +```json +// initial-state.json +{ + "ticker": "TEST_PST", + "name": "Test PST", + "owner": "G1mQ4_jjcca46JqR1kEt0yKvhaw6EUrXLiEwebMvSwo", + "balances": { + "G1mQ4_jjcca46JqR1kEt0yKvhaw6EUrXLiEwebMvSwo": 1000, + "Jo9BZOaIVBDIhyKDiSnJ1bIU4usT1ZZJ5Kl6M-rBFdI": 1000, + } +} + +``` +これにより、PSTの初期オプションが設定されます。これを `initial-state.json` として保存してください。 + +- **`ticker`** - トークンのシンボル(例:BTC、ETH) +- **`name`** - トークンの名前 +- **`owner`** - コントラクトの所有者のアドレス +- **`balances`** - 初期トークンを配布するアドレス + +### コントラクトの作成 + +PSTコントラクトには、`handle` という単一の関数が必要です。この関数は2つの引数を受け取ります。 + +`state` はコントラクトの現在の状態を表し、`action` は実行したいアクション(例:トークンの移転)を示します。 + +PSTコントラクトへの呼び出しは、次のいずれかの結果を返す必要があります: +- **`state`** - コントラクトの状態が変更された場合(例:移転を行う)。 +- **`result`** - コントラクトの状態が変更されない場合(例:残高の確認)。 + +それ以外の場合は、呼び出しが無効であるか失敗した場合には **`error`** を投げる必要があります。 + +まず、メインの `handle` 関数を定義しましょう。. +```js +//contract.js +export function handle(state, action) { + let balances = state.balances; + let input = action.input; + let caller = action.caller; +} +``` +これにより、スマートコントラクトが使用する一般的な操作のための変数が設定されます。 + +次に、状態を変更する最初のタイプの入力を追加します。これにより、契約の所有者は新しいPSTを自分のウォレットアドレスにミントできます。 + +```js + if (input.function == 'mint') { + let qty = input.qty; + + if (qty <= 0) { + throw new ContractError('Invalid token mint'); + } + + if (!Number.isInteger(qty)) { + throw new ContractError('Invalid value for "qty". Must be an integer'); + } + + if(caller != state.owner) { + throw new ContractError('Only the owner of the contract can mint new tokens.'); + } + + balances[caller] ? (balances[caller] += qty) : (balances[caller] = qty); + return { state }; + } +``` +次の関数は、ウォレット間のPSTの転送を処理します。 + +```js +if (input.function == 'transfer') { + + let target = input.target; + let qty = input.qty; + + if (!Number.isInteger(qty)) { + throw new ContractError(`Invalid value for "qty". Must be an integer`); + } + + if (!target) { + throw new ContractError(`No target specified`); + } + + if (qty <= 0 || caller == target) { + throw new ContractError('Invalid token transfer'); + } + + if (balances[caller] < qty) { + throw new ContractError(`Caller balance not high enough to send ${qty} token(s)!`); + } + + // Lower the token balance of the caller + balances[caller] -= qty; + if (target in balances) { + // Wallet already exists in state, add new tokens + balances[target] += qty; + } else { + // Wallet is new, set starting balance + balances[target] = qty; + } + + return { state }; + } +``` +ターゲットウォレットのPST残高を表示する方法も追加しましょう。 + +```js +if (input.function == 'balance') { + + let target = input.target; + let ticker = state.ticker; + + if (typeof target !== 'string') { + throw new ContractError(`Must specificy target to get balance for`); + } + + if (typeof balances[target] !== 'number') { + throw new ContractError(`Cannnot get balance, target does not exist`); + } + + return { result: { target, ticker, balance: balances[target] } }; + } +``` +最後に、入力された内容が`mint`、`transfer`、または`balance`関数でない場合にエラーをスローします。 + +```js +throw new ContractError(`No function supplied or function not recognised: "${input.function}"`); +``` + +### **契約のデプロイ** + +契約をデプロイするには、Warpと連携して契約をデプロイするNodeJSスクリプトを書く必要があります。 + +`deploy-contract.js`という名前のファイルを作成し、`WarpFactory`をインポートして開始します。 + +```js +import { WarpFactory } from 'warp-contracts/mjs' +``` +次に、Warpのインスタンスを初期化します。 + +契約をデプロイする場所に応じて、`forMainnet()`を`forLocal()`または`forTestnet()`に置き換えることができます。 + +```js +const warp = WarpFactory.forMainnet(); +``` + +Warpの設定が完了したら、契約をデプロイするためのウォレットが必要です。ローカルのキー・ファイルを使用するか、自分のものを使用できます: + +```js +const walletAddress = "path/to/wallet.json" +``` + or, generate a new wallet through Warp using the following code: + +```js +const jwk = await warp.arweave.wallets.generate(); +const walletAddress = await warp.arweave.wallets.jwkToAddress(jwk); +``` +100KB未満のトランザクションは無料なので、ウォレットに資金を入れる必要はありません! + +--- + +契約をデプロイする前に、初期状態ファイルと契約ファイルを読み込む必要があります。 + +```js +const contract = fs.readFileSync(path.join(__dirname, 'contract.js'), 'utf8'); +const state = JSON.parse( + fs.readFileSync(path.join(__dirname, 'initial-state.json'), 'utf8') +); +``` +新しいウォレットを生成してデプロイする場合、初期状態で`owner`を上書きする必要があります。次のコードを使ってこれを行うことができます: +```js +const initialState = { + ...stateFromFile, + ...{ + owner: walletAddress, + }, +}; +``` +ウォレットを使用している場合は、代わりに`initial-state.json`ファイルを直接編集してウォレットアドレスを使用できます。 + +以下のコードが契約のデプロイを処理します: + +```js +const contractTxId = await warp.createContract.deploy({ + wallet, + initState: JSON.stringify(initialState), + src: contractSrc, +}); + +console.log('Deployment completed: ', { + ...result, + sonar: `https://sonar.warp.cc/#/app/contract/${result.contractTxId}` +}); +``` + +`node deploy-contract.js`を実行すると、あなたの契約がデプロイされ、ターミナルに契約トランザクションIDがログとして表示されます。 + +--- + +**出典およびさらなる情報**: [Warp Docs](https://academy.warp.cc/tutorials/pst/introduction/intro) \ No newline at end of file diff --git a/docs/src/ja/guides/deployment/arkb.md b/docs/src/ja/guides/deployment/arkb.md new file mode 100644 index 0000000..38e4490 --- /dev/null +++ b/docs/src/ja/guides/deployment/arkb.md @@ -0,0 +1,99 @@ +--- +locale: ja +--- +# arkb + +## 要件 + +`arkb`を使用してデプロイするには、データトランザクションコストをカバーするためのArweaveウォレットが必要です。 + +## インストール + +`arkb`をインストールするには、以下のコマンドを実行します。 + + + +```console:no-line-numbers +npm install -g arkb +``` + + + + +```console:no-line-numbers +yarn add ar-gql +``` + + + + +## デプロイ + +ファイルのディレクトリまたはPermawebアプリケーションをアップロードする際、デフォルトで`arkb`は各ファイルをL1トランザクションとして個別にデプロイし、Bundlrを使用してトランザクションをバンドルするオプションがあります。 + +## 静的ビルド + +Permawebアプリケーションは静的に生成されるため、コードとコンテンツは事前に生成され、ネットワークに保存されます。 + +以下は静的サイトの例です。これをPermawebにデプロイするには、`build`ディレクトリを`deploy`フラグの引数として渡します。 + +```js +|- build + |- index.html + |- styles.css + |- index.js +``` + +#### デフォルトデプロイ + +L1トランザクションとしてデプロイすると、Arweaveネットワークに直接アップロードされるため、確認に時間がかかる場合があります。 + +```console +arkb deploy [folder] --wallet [path to wallet] +``` + +
+ + +#### バンドルデプロイ + +Bundlrを使用してデプロイするには、Bundlrノードに資金を供給する必要があります。 + +Bundlrのnode2は、100KB未満のトランザクションを無料で提供します。 + +デプロイメントにカスタム識別可能なタグを追加するには、`tag-name/tag-value`構文を使用します。 + +```console +arkb deploy [folder] --use-bundler [bundlr node] --wallet [path to wallet] --tag-name [tag name] --tag-value [tag value] +``` + +
+ + +## Other Commands + +#### Fund Bundlr + +```console +arkb fund-bundler [amount] --use-bundler [bundlr node] +``` + +\* Funding a Bundlr instance can take up to 30 minutes to process + +#### Saving Keyfile + +```console +arkb wallet-save [path to wallet] +``` + +キーを保存した後は、--wallet-file オプションなしでコマンドを実行できるようになります。次のように実行します。 + +```console +arkb deploy [path to directory] +``` + +#### Check Wallet Balance + +```console +arkb balance +``` diff --git a/docs/src/ja/guides/deployment/github-action.md b/docs/src/ja/guides/deployment/github-action.md new file mode 100644 index 0000000..5103e3c --- /dev/null +++ b/docs/src/ja/guides/deployment/github-action.md @@ -0,0 +1,125 @@ +--- +locale: ja +--- +# GitHub Actions + +::: warning +このガイドは教育目的のためのものであり、アプリケーションをデプロイする方法を学ぶためのオプションとして使用するべきです。このガイドでは、私たちの秘密情報を保護するために`microsoft`が所有する第三者リソース`github`を信頼しています。彼らのドキュメントでは、秘密を保存する際に`libsodium sealed box`を使用して暗号化しています。彼らのセキュリティプラクティスについての詳細はこちらで確認できます。 https://docs.github.com/en/actions/security-guides/encrypted-secrets +::: + +GitHub ActionsはCI/CDパイプラインで、開発者がGitHubワークフローシステムから生成されたイベントをトリガーとして自動化されたタスクを実行できるようにします。これらのタスクはほぼ何でも可能で、このガイドではIrysとArNSを使用してPermawebアプリケーションをデプロイする方法を示します。 + +::: tip +このガイドではGitHub Actionsの理解が必要であり、いくつかのArNSテストトークンが必要です。詳細については、https://ar.io/arns/ をご覧ください。 +::: + +::: warning +このガイドには、テストやプロダクションワークフローに追加したいその他のチェックは含まれていません。 +::: + +## デプロイスクリプトの作成 + +デプロイスクリプトは、アプリケーションをデプロイするための重い作業を行うスクリプトです。`@irys/sdk`と`warp-contracts`を使用して、アプリケーションを公開し、新しく公開されたアプリケーションをArNSに登録します。 + +デプロイ依存関係をインストールします。 + +```console +npm install --save-dev @permaweb/arx +npm install --save-dev warp-contracts +npm install --save-dev arweave +``` + +Create `deploy.mjs` file + +```js +import Arx from "@permaweb/arx"; +import { WarpFactory, defaultCacheOptions } from "warp-contracts"; +import Arweave from "arweave"; + +const ANT = "[YOUR ANT CONTRACT]"; +const DEPLOY_FOLDER = "./dist"; +const TURBO_NODE = "https://turbo.ardrive.io"; + +const jwk = JSON.parse(Buffer.from(process.env.PERMAWEB_KEY, "base64").toString("utf-8")); +const arweave = Arweave.init({ host: "arweave.net", port: 443, protocol: "https" }); +const arx = new Arx({ url: TURBO_NODE, token: "arweave", key: jwk }); +const warp = WarpFactory.custom(arweave, defaultCacheOptions, "mainnet").useArweaveGateway().build(); + +const contract = warp.contract(ANT).connect(jwk); +// upload folder +const result = await arx.uploadFolder(DEPLOY_FOLDER, { + indexFile: "index.html", +}); + +// update ANT +await contract.writeInteraction({ + function: "setRecord", + subDomain: "@", + transactionId: result.id, +}); + +console.log("Deployed Cookbook, please wait 20 - 30 minutes for ArNS to update!"); +``` + + +## package.jsonにスクリプトを追加 + +新しいスクリプトプロパティ`deploy`を作成し、ビルドスクリプトを呼び出し、その後`scripts deploy`プロパティの値に`node deploy.mjs`を設定します。 + +package.json + +```json + ... + "scripts": { + "dev": "vuepress dev src", + "build": "vuepress build src", + "deploy": "yarn build && node deploy.mjs" + }, + ... +``` + +## GitHub Actionの作成 + +`.github/workflows`フォルダーに`deploy.yml`ファイルを作成します。このファイルは、`main`ブランチでプッシュイベントがトリガーされたときにGitHub Actionsがデプロイを実行するよう指示します。 + +```yml +name: publish + +on: + push: + branches: + - "main" + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v1 + with: + node-version: 18.x + - run: yarn + - run: yarn deploy + env: + KEY: ${{ secrets.PERMAWEB_KEY }} +``` + +## まとめ + +プロジェクトリポジトリの設定とシークレットに移動し、新しいシークレットをリポジトリに追加します。このプロジェクトのためにこのシークレットはPERMAWEB_KEYと呼ばれます。シークレットの値はデプロイメントウォレットのBase64エンコードされた文字列である必要があります。 + +```console +base64 -i wallet.json | pbcopy +``` + +このデプロイメントが機能するためには、このウォレットのIrysアカウントに資金を供給する必要があります。使用するウォレットには少しの$ARが必要です(0.5 AR程度で大丈夫です)。その後、Irys CLIを使用して資金を供給します。 + +```console +arx fund 250000000000 -w wallet.json -t arweave +``` + +::: warning +Keep this wallet low on funds and only use it for this project. +::: + +:tada: Permawebへのデプロイを完全に自動化するGitHub Actionをセットアップしました! \ No newline at end of file diff --git a/docs/src/ja/guides/deployment/index.md b/docs/src/ja/guides/deployment/index.md new file mode 100644 index 0000000..1dc4af4 --- /dev/null +++ b/docs/src/ja/guides/deployment/index.md @@ -0,0 +1,7 @@ +--- +locale: ja +--- +# デプロイメント + +- [arkb](arkb.md) +- [github-action](github-action.md) \ No newline at end of file diff --git a/docs/src/ja/guides/dns-integration/server-side.md b/docs/src/ja/guides/dns-integration/server-side.md new file mode 100644 index 0000000..2724b98 --- /dev/null +++ b/docs/src/ja/guides/dns-integration/server-side.md @@ -0,0 +1,80 @@ +--- +locale: ja +--- +# サーバーサイドDNS統合 + +あなたのパーマウェブアプリケーションはパーマウェブ上にありますが、ユーザーがこのアプリにアクセスするために使用したい特定のドメイン(mydomain.com)を持っています。このドメインをパーマウェブアプリに接続するためのオプションはいくつかありますが、ここで示すオプションはサーバーサイドリダイレクトと呼ばれます。リダイレクトはリバースプロキシとして行われ、ユーザーはブラウザでmydomain.comのままで、背後ではアプリケーションがパーマウェブから提供されています。 + +::: tip +任意のリバースプロキシを使用してサーバーサイドリダイレクトを設定できます。このガイドでは、軽量のエッジホスティングサービスであるdenoとdeno.comを使用します。 +::: + +## deno.comを使用したリバースプロキシの設定に必要なもの + +* Deno.comアカウント(この時点では無料です)。 +* DNS設定にアクセスできるドメイン。 +* パーマウェブにデプロイされたパーマウェブアプリケーションの識別子。 + +## Deno.comでプロキシを作成する + +Deno Deployは、エッジで動作する分散システムです。世界中に35の地域があります。ブラウザを開いて[https://deno.com](https://deno.com)にアクセスし、サインインするか、アカウントを持っていない場合はサインアップします。 + +`New Project`をクリックし、`Play`をクリックします。 + +Denoプレイグラウンドでは、ブラウザを離れることなくプロキシを作成できます。 + +以下のコードをコピーしてください: + +```ts +import { serve } from "https://deno.land/std/http/mod.ts"; + +const APP_ID = "YOUR AREWEAVE IDENTIFIER" + +const fileService = `https://arweave.net/${APP_ID}`; + +// handle requests +async function reqHandler(req: Request) { + const path = new URL(req.url).pathname; + // proxy to arweave.net + return await fetch(fileService + path).then(res => { + const headers = new Headers(res.headers) + // instruct server to leverage the edge cache + headers.set('cache-control', 's-max-age=600, stale-while-revalidate=6000') + + // return response from arweave.net + return new Response(res.body, { + status: res.status, + headers + }) + }); +} + +// listen for requests +serve(reqHandler, { port: 8100 }); +``` + +このプロキシサーバーは、mydomain.comからのリクエストを受信し、そのリクエストをarweave.net/APP_IDにプロキシし、レスポンスをmydomain.comとして返します。あなたのAPP_IDは、パーマウェブアプリケーションのTX_ID識別子です。 + +`Save and Deploy`をクリックします。 + +## DNSへの接続 + +プロジェクト設定でドメインセクションに移動し、ドメインを追加するためのクリックします。 + +`mydomain.com`ドメインを入力し、DNS設定を変更してdeno deployエッジネットワークを指すようにする手順に従います。 + +DNSが解決されるまで数分かかることがありますが、一旦解決されれば、アプリはmydomain.comからレンダリングされます。 + +:tada: おめでとうございます!あなたのパーマウェブアプリケーションへのサーバーサイドリダイレクトを公開しました。 + +::: warning +アプリケーションの変更は新しいTX_IDを生成し、そのTX_IDを変更して新しい変更をドメインに公開する必要があることに注意してください。 +::: + +## デプロイの自動化 + +パーマウェブアプリの新しいデプロイを自動化したい場合は、GitHub Actionsとdeno deploy GitHub Actionの使用を検討してください: [https://github.com/denoland/deployctl/blob/main/action/README.md](https://github.com/denoland/deployctl/blob/main/action/README.md) + +## まとめ + +サーバーサイドリダイレクトは、ユーザーにドメイン名システムのURLを提供してパーマウェブアプリケーションにアクセスさせるのに優れています。このガイドがあなたのパーマウェブ開発の旅に役立つことを願っています! \ No newline at end of file diff --git a/docs/src/ja/guides/dns-integration/spheron.md b/docs/src/ja/guides/dns-integration/spheron.md new file mode 100644 index 0000000..6c3e382 --- /dev/null +++ b/docs/src/ja/guides/dns-integration/spheron.md @@ -0,0 +1,44 @@ +--- +locale: ja +--- +# Spheron + +Spheronプロトコルは、現代のdappの作成を簡素化するために設計された分散型プラットフォームです。開発者にシームレスな体験を提供し、迅速なデプロイメント、自動スケーリング、分散型ネットワーク上でのパーソナライズされたコンテンツ配信を可能にします。 + +SpheronはGitHub統合を使用して継続的デプロイメントを管理し、任意のデプロイメントにカスタムDNSを統合する機能を提供します。 + +## Spheronアカウントを設定するために必要なもの + +* GitHubアカウント +* パーマウェブアプリケーション識別子(すでにパーマウェブにデプロイされているもの) + +::: tip +Spheronを使用してArweaveアプリケーションをデプロイするには、月額20ドルのProプランが必要です。 +::: + +## 認証/ログイン + +Spheronは、Vercelに似て、GitHub、GitLab、またはBitBucketリポジトリに依存しています。 + +Spheronにログインするには、[Spheron Aquaダッシュボード](https://app.spheron.network/)にアクセスし、希望する認証方法を選択します。 + +## リポジトリのインポート + +ログインすると、ユーザーダッシュボードが表示されます。ダッシュボードの右上にある「New Project」ボタンをクリックしてリポジトリをインポートします。デプロイしたいリポジトリを選択し、Arweaveへのデプロイオプションを選びます。 + +## DNSへの接続 + +プロジェクトをインポートし、デプロイしたら、「Domains」タブに移動します。ドメイン名、環境を入力し、デプロイメント先のドメインを選択します。 + +続行する前に、設定したレコードを確認するよう求められます。ドメインマネージャーでレコードを更新してください。DNSの更新には最大72時間かかる場合があります。以下の画像のようなものが表示されます。 + + + +更新が完了したら、Spheronで確認する必要があります。「Verify」ボタンをクリックすれば、すべてが整い、準備完了です。これで、GitHubに新しいバージョンをデプロイするたびに、あなたのドメインは最新のバージョンに更新されます!🎉 + +::: tip +完全に分散化されたアプリケーションを作成するには、[ArNS](https://ar.io/arns)やその他の分散型DNSサーバーを使用することをお勧めします。 +::: +## まとめ + +Spheronは、PermawebアプリケーションをArweaveにデプロイし、カスタムドメインにリダイレクトするための簡単な方法です。継続的インテグレーションと継続的デプロイメントを組み合わせて、スムーズな開発者体験を保証します! \ No newline at end of file diff --git a/docs/src/ja/guides/exm/api.md b/docs/src/ja/guides/exm/api.md new file mode 100644 index 0000000..4726428 --- /dev/null +++ b/docs/src/ja/guides/exm/api.md @@ -0,0 +1,55 @@ +--- +locale: ja +--- +# 実行マシン API トークン + +EXM は暗号に依存せず、単一の API トークン(キーとも呼ばれます)でインタラクションを行うことを目指しています。この API キーは、デプロイや書き込み操作など、EXM のほとんどのアクションに必要です。 + +## API トークンの作成 + +API トークンを作成するには、以下の手順を実行する必要があります。 + +- [メインページ](https://exm.dev/)に移動します。 +- サインアップ / サインインのための好みの方法を選択します。 + +![EXM サインインオプション](~@source/images/exm-sign-in-options.png) + +- ダッシュボードにリダイレクトされた後、「新しいトークン」をクリックします。 + +![新しい API トークンを作成](~@source/images/exm-create-token.png) + +- 生成されたトークンをコピーし、SDK または CLI で使用します。 + +## API トークンの安全な取り扱い + +トークンはアカウントの識別子であり、それに関連する機能にアクセスすることを可能にします。したがって、このトークンを秘密に保つことは非常に重要です。スパムや攻撃から機能を保護するためです。最良の方法は、環境変数を使用することです。 + +環境変数を保存する方法は 2 通りあります。 + +1. コマンドラインを通じて: + +プロジェクトのディレクトリで、以下のコマンドを実行します。 +```bash +export EXM_PK= +``` + + +2. `dotenv` SDK を通じて: + +- コマンドラインで以下を実行します: + + ```bash + npm install dotenv + + #OR + + yarn add dotenv + ``` +- ファイル内で変数を使用してライブラリをインポートします: + + ```jsx + import dotenv from "dotenv"; + dotenv.config(); + ``` + +これにより、このキーは `process.env.EXM_PK` としてファイル内で参照でき、露出したり GitHub のようなバージョン管理システムにプッシュすることなく使用できます。 \ No newline at end of file diff --git a/docs/src/ja/guides/exm/intro.md b/docs/src/ja/guides/exm/intro.md new file mode 100644 index 0000000..0c1220f --- /dev/null +++ b/docs/src/ja/guides/exm/intro.md @@ -0,0 +1,66 @@ +--- +locale: ja +--- +# 実行マシン (EXM) + +**実行マシン (EXM)** は、ブロックチェーンベースの(永続的な)サーバーレス機能を作成し活用する能力を提供する開発者向けプラットフォームであり、ウォレットやトークンなどのブロックチェーン技術に関する知識やアクセスは必要ありません。 + +これにより、**コンポーザブル**、**不変**、および **信頼不要** のアプリケーションを摩擦なく作成することが可能になります。 + +## Arweave 上のサーバーレス機能 + +サーバーレス機能は、EXM を介して Arweave に保存され、アプリケーションを迅速に提供するためにキャッシュとしてのコピーも保存されます。これらの機能は状態を保持し(データを保存する)、単一の機能 ID がデータとそのデータに対する相互作用および更新ロジックを指します。 + +EXM はストレージと実行を管理し、専用サーバーを維持する必要を排除し、維持コストを削減し、モジュール性の層を追加します。 + +モジュール性により、さまざまな組み合わせで機能を選択し組み合わせて、私たちの要件に合ったカスタムアプリケーションを作成することができます。これらの機能とそれに対する相互作用は **永久にチェーン上に保存され**、改ざんされることはなく、誰でも確認できるため、**不変**で **信頼不要** です。 + +さらに、EXM は Arweave にデータをアップロードするコストを負担し、開発者にとって暗号に依存しないプロセスを提供します。 + +![専用サーバー上の機能とブロックチェーン上のサーバーレス機能の比較](~@source/images/exm-serverless-functions.png) + +## 背景での動作方法 + +ユーザーは、専用の EXM サーバーにトランザクションリクエストを送信します。検証可能な計算の助けを借りて、実行マシンはユーザーリクエストを迅速かつ高性能に処理でき、トークンやウォレットのようなブロックチェーン技術を必要とせずに分散化された結果を維持します。その後、EXM は更新された状態でキャッシュレイヤーを更新し、データを Arweave にアップロードします。キャッシュレイヤーは、アプリケーションを迅速に提供するために使用されます。 + +さらに、EXM は信頼を最小化した環境を維持することができ、ユーザーは遅延評価を使用してトランザクションや契約の現在の状態を検証できます。 + +
+検証可能な計算の説明 + +検証可能な計算は、集中型システムの利点を活用しながら、分散型の結果を保証する計算の一形態です。 + +すべてのサーバーレス機能は、情報の状態を読み取るか更新する能力を持っています。検証可能な計算を使用すると、この状態は集中型サーバーにキャッシュされ、処理時に合意が必要ないため、パフォーマンスが向上しますが、情報は常にユーザーによる検証のために利用可能です。これにより、ユーザーはキャッシュレイヤーに保存されている間でも「遅延評価」を行うことができ、最終的にオンチェーンに移動します。 + +![検証可能な計算の説明](~@source/images/exm-verifiable-computing.png) + +検証可能な計算がシームレスに機能するためには、いくつかのコア部分が実装される必要があります。 + +- エグゼキューター: ユーザートランザクションリクエストを処理し、キャッシュするソフトウェア。 +- プロセッサ: 単一または複数のユーザーからトランザクションを受け取る責任を持つ集中型パイプライン(システム)。トランザクションのバルクを受信した後、新しいデータを使用してスマートコントラクトを再評価する必要があります。トランザクションが受信されると、スマートコントラクトの最新の状態がアップグレードされ、ユーザーがアクセスできるように保存される必要があります。プロセッサは通常、タイムスタンプによってトランザクションの順序を決定します。 +- コンベイヤー: データベースのブロックチェーンと橋渡しをする集中型システム。プロセッサによって受信されたすべてのトランザクションはコンベイヤーに送信され、このオペレーションを Arweave のようなデータベースのブロックチェーンに保存することを保証します。 +
+
+ +
+遅延評価の説明 + +![遅延評価の説明](~@source/images/exm-lazy-evaluation.png) + +遅延評価は、名前が示すように、スマートコントラクトとその現在の状態をブロックチェーンで遅延評価する方法です。スマートコントラクト自体とそれに対するすべての相互作用(書き込み操作)はチェーン上に保存され、任意のユーザーがアクセスできます。 + +これは、ノードからユーザーに処理の負担を移すことを目的としています。ユーザーは、スマートコントラクトコードとそれとの相互作用をローカルで評価し、現在の契約の状態を検証することができます。 + +これにより、ノードがチェーンの現在の状態の完全なコピーを保存し、それに対して合意に達する必要がなくなります。したがって、コストを削減し、パフォーマンスを向上させます。 + +すべての人が同じデータにアクセスできるため、すべての人が同じ方法で解釈し、情報の現在の状態にアクセスできることが保証されます。 +
+
+ +## サーバーレス機能を使用する利点 + +- サーバーレス機能はモジュール性の層を追加し、さまざまなアプリケーション要件に応じて組み合わせることができます。 +- バグ修正や新機能の統合は、ターゲットを絞って実施しやすくなります。 +- 実行マシンには、アプリケーションを迅速に提供するためのキャッシュレイヤーがあります。 +- 実行マシンは、集中型システムを活用しながら、分散型の結果を保証します。 +- 実行マシンは暗号に依存しないことを目指しています。 \ No newline at end of file diff --git a/docs/src/ja/guides/exm/js-sdk/sdk-deploy.md b/docs/src/ja/guides/exm/js-sdk/sdk-deploy.md new file mode 100644 index 0000000..94055db --- /dev/null +++ b/docs/src/ja/guides/exm/js-sdk/sdk-deploy.md @@ -0,0 +1,77 @@ +--- +locale: ja +--- +# Execution Machine SDKを使用したサーバーレス関数のデプロイ + +JavaScriptでSDKを使用してサーバーレス関数をデプロイするために、ネットワークに関数をデプロイする方法をコンピュータに指示するスクリプトを作成します。 + +
+関数ロジックの例 + +パッケージをインストールした後、プロジェクト内で関数のロジックを定義するファイルが必要です。 + + + + +```js +export async function handle(state, action) { + state.counter++; + return { state }; +} +``` + + + + +関数を定義するための構文は、JavaScriptのスマートコントラクトに対してSmartWeaveによって実装された標準に基づいています。各関数には、格納されている値のJSONオブジェクトである `state` があり、これらの値と相互作用するための `actions` があります。 + +上記の関数は、ユーザーの配列に名前を追加するもので、次の行を使用しています: + +```js +state.users.push(action.input.name); +``` + +関数をデプロイする際には、`users` という空の配列を初期化します。これにより、関数が読み取りおよび書き込み呼び出し中にこの状態変数(関数の状態に格納されている変数)を識別するのに役立ちます。初期化時の `state` は次のようになります: + +```js +{ users: [] } +``` + +さらに、関数に書き込む際には、`name` というキーを使用して、書き込み操作に供給している値を識別します。これらの定義は、複数の値を扱う場合にさらに重要になります。 +
+
+ +関数のロジックが定義され、APIトークンが正しく設定されたら、以下のようにデプロイファイルを作成します: + + + + +```js +import { Exm, ContractType } from '@execution-machine/sdk'; +import { readFileSync, writeFileSync } from 'fs'; + +// init new EXM instance +const exm = new Exm({ token: process.env.EXM_API_TOKEN }); + +// fetch function source +const functionSource = readFileSync('function.js'); + +// .deploy(source, initState, contractType) +const data = await exm.functions.deploy(functionSource, { users: [] }, ContractType.JS); + +// write the function id to a local file +writeFileSync('./functionId.js', `export const functionId = "${data.id}"`) +``` + + + + +デプロイする際には、関数ロジック、関数の初期状態、および関数定義のプログラミング言語を引数として渡す必要があります。デプロイするには、プロジェクトの適切なディレクトリ内で次のコマンドを実行します: + +```bash +node deploy.js +``` + +デプロイ後、いくつかのデータが返され、その中から `functionId` をローカルファイルに保存します。`functionId` は、その名の通り、サーバーレス関数との読み取りや書き込み操作などのさらなる相互作用を助ける一意の識別子です。 + +以下のセクションでは、EXM関数を使用した読み取りと書き込みのプロセスを説明します。 diff --git a/docs/src/ja/guides/exm/js-sdk/sdk-intro.md b/docs/src/ja/guides/exm/js-sdk/sdk-intro.md new file mode 100644 index 0000000..47cb6f0 --- /dev/null +++ b/docs/src/ja/guides/exm/js-sdk/sdk-intro.md @@ -0,0 +1,57 @@ +--- +locale: ja +--- +# Execution Machine SDK + +JavaScript SDKは、JavaScriptおよびTypeScriptアプリケーションでExecution Machine(EXM)を使用するためのものです。SDKを使用するには、以下のセットアップ手順が必要です。 + +## インストール + +プロジェクトにEXMをインストールするには、`npm`または`yarn`を使用できます。 + + + + +```bash +npm install @execution-machine/sdk +``` + + + + +```bash +yarn add @execution-machine/sdk +``` + + + + +## インポート + +EXMをプロジェクトで使用する場合、パッケージは次のようにインポートする必要があります。 + + + + +```js +import { Exm } from '@execution-machine/sdk'; +``` + + + +## インスタンスの作成 + +インストールとインポートの後、EXMと対話するにはインスタンスを作成する必要があります。 + + + + +```js +const exmInstance = new Exm({ token: 'MY_EXM_TOKEN' }); +``` + + + +## サマリー + +以下のガイドでは、EXM JS SDKを使用してサーバーレス関数をデプロイする方法と、それらとのインタラクション方法を示します。 diff --git a/docs/src/ja/guides/exm/js-sdk/sdk-read.md b/docs/src/ja/guides/exm/js-sdk/sdk-read.md new file mode 100644 index 0000000..7db1371 --- /dev/null +++ b/docs/src/ja/guides/exm/js-sdk/sdk-read.md @@ -0,0 +1,55 @@ +--- +locale: ja +--- +# Execution Machine SDKを使用したサーバーレス関数の読み取り + +EXMサーバーレス関数から状態を読み取る方法は2つあります。[はじめに](../intro.md#serverless-functions-on-arweave)で説明したように、EXMは関数のコピーをキャッシュ層に保存してアプリケーションを迅速に提供しますが、同時にその関数をArweaveにアップロードして分散化とその関連する利点を維持しています。この結果、関数の状態はEXMのキャッシュ層またはArweaveから直接読み取ることができます。 + +1. EXMのキャッシュ層からの読み取り: + + 読み取り呼び出しは、EXMのキャッシュ層に保存された最新の状態を読み取ります。この層は、アプリケーションを迅速に提供するために特別に設計されています。楽観的アプローチを取り、トランザクションリクエストを受け取るとすぐに関数の状態を更新します。 + + + + +```js +import { Exm } from '@execution-machine/sdk'; +import { functionId } from './functionId.js'; + +// init new EXM instance +const exm = new Exm({ token: process.env.EXM_API_TOKEN }); + +// read from cached layer +const readResult = await exm.functions.read(functionId); +console.log(readResult); +``` + + + + +2. Arweaveからの直接読み取り(評価): + + 評価呼び出しは、Arweaveで正常に処理された最新の状態を返します。この最新の状態は、[遅延評価](../intro.md#how-does-it-work-in-the-background)によって計算され、初期状態と関数との相互作用を発生順に評価して最新の状態に到達します。 + + + + +```js +import { Exm } from '@execution-machine/sdk'; +import { functionId } from './functionId.js'; + +// init new EXM instance +const exm = new Exm({ token: process.env.EXM_API_TOKEN }); + +// evaluate from arweave +const evalResult = await exm.functions.evaluate(functionId); +console.log(evalResult); +``` + + + + +::: tip +Arweaveからの読み取りは、検証目的のみに推奨されます。評価呼び出しから返された関数の状態は、キャッシュ層から返された情報と照合してその真正性を確認できます。トランザクションリクエストの投稿とネットワーク上での更新にはわずかな遅延がある場合があります。 +::: + diff --git a/docs/src/ja/guides/exm/js-sdk/sdk-write.md b/docs/src/ja/guides/exm/js-sdk/sdk-write.md new file mode 100644 index 0000000..cf6da46 --- /dev/null +++ b/docs/src/ja/guides/exm/js-sdk/sdk-write.md @@ -0,0 +1,120 @@ +--- +locale: ja +--- +# Execution Machine SDKを使用したサーバーレス関数への書き込み + +関数がデプロイされると、その状態は書き込みインタラクションを使って更新できます。EXMのサーバーレス関数のユニークなアーキテクチャにより、状態を更新するためのロジックは状態自体と共に保存され、これらは同じ `functionId` を使用して参照できます。関数は、アプリケーションの要件に応じて状態を更新するための単一の操作または複数の操作を持つことができ、書き込み呼び出しの引数はそれに応じて変わります。 + + +
+関数ロジックと対応する書き込み例 + +- 状態を更新するための単一の操作を持つ関数の例: + +以下の関数は、ユーザーの配列に名前を追加します。 + +```js +export async function handle(state, action) { + state.users.push(action.input.name); + return { state }; +} +``` + +The state is updated by the following line: + +```js +state.users.push(action.input.name); +``` + +In this case, the write call only needs a key-value pair of `name` as an input: + +```js +const inputs = [{ name: 'Open Sourcerer' }]; +``` + +- 状態を更新するための複数の操作を持つ関数の例: + +以下の関数は投稿を作成しますが、これらの投稿を更新または削除する機能もあります。 + +```js +export async function handle(state, action) { + const { input } = action + if (input.type === 'createPost' || input.type === 'updatePost') { + state.posts[input.post.id] = input.post + } + if (input.type === 'deletePost') { + delete state.posts[input.postId] + } + return { state } +} +``` + +投稿は次のフォーマットのオブジェクトです: + +```js +post: { + id: string + title: string + content: string + author: string +} +``` + +各投稿に一意の `id` を付与して、更新または削除する際に参照できるようにします。対応する `id` が存在しない場合は、代わりに新しい投稿が作成されます。 + +ただし、上記の関数に見られるように、この関数ロジックは複数の操作を実行する能力を持っており、したがって、各操作に名前が付けられています。この名前は、適切な書き込み呼び出しを実行するために、投稿またはIDと共に入力として渡す必要があります。投稿を更新する場合、書き込み呼び出しの入力は次のようになります: + +```js +const inputs = [{ + type: 'updatePost', + post: { + id, + title: "My Post", + content: "My updated post", + author: "Open Sourcerer" + } +}]; +``` +
+
+ +書き込みトランザクションは、相互作用する関数の `functionId` と、書き込みリクエストを処理し状態を更新するために必要な `inputs` の2つの引数を取ります。 + + + + +```js +import { Exm } from '@execution-machine/sdk'; +import { functionId } from './functionId.js'; + +// init new EXM instance +const exm = new Exm({ token: process.env.EXM_API_TOKEN }); + +// inputs is an array of objects +const inputs = [{ name: 'Open Sourcerer' }]; + +// read from cached layer +const writeResult = await exm.functions.write(functionId, inputs); +console.log(writeResult); +``` + + + + +成功した書き込みリクエストは、ステータスが SUCCESS のオブジェクトを返します。 + +```bash +{ + status: 'SUCCESS', + data: { + pseudoId: 'txnId', + execution: { + state: [Object], + result: null, + validity: [Object], + exmContext: [Object], + updated: false + } + } +} +``` \ No newline at end of file diff --git a/docs/src/ja/guides/http-api.md b/docs/src/ja/guides/http-api.md new file mode 100644 index 0000000..a929d6d --- /dev/null +++ b/docs/src/ja/guides/http-api.md @@ -0,0 +1,220 @@ +--- +locale: ja +--- +# トランザクションデータの取得 + +インデックスサービスはトランザクションメタデータのクエリを可能にしますが、トランザクションデータ自体へのアクセスは提供していません。これは、トランザクションデータのキャッシュとメタデータのインデックス作成が異なるリソース要件を持つためです。インデックスサービスは主にデータベースでのクエリを実行するためにコンピュートリソースに依存し、一方トランザクションデータはストレージと帯域幅を最適化するためにコンテンツ配信ネットワーク(CDN)への展開に適しています。 + +ほとんどのゲートウェイは、一連のHTTPエンドポイントを通じてトランザクションデータキャッシングサービスを提供しています。これらのエンドポイントからトランザクションデータを要求するために、任意のHTTPクライアント/パッケージを使用できます。例えば、JavaScriptのAxiosやFetch、PHPのGuzzleなどです。 + +トランザクションデータキャッシングサービスをバイパスして、Arweaveのピア/ノードから直接データを取得したい場合も可能ですが、かなりの作業が必要です! + +トランザクションデータは、ネットワークの最初から現在のブロックまで、256KBのチャンクの連続したシーケンスとしてArweaveに保存されます。この形式は、マイナーがArweaveデータを保存していることを証明するために参加するSPoRAマイニングメカニズムをサポートするように最適化されています。 + +::: info +1. よく知られたピアからピアのリストを取得します。 +1. ピアにトランザクションデータを含むチャンクオフセットを尋ねます。 +1. ピアにチャンクを要求します。 + 1. ピアがチャンクを提供する場合、元の形式に再結合します。 +1. (ピアがチャンクを持っていない場合)ピアリストを歩いてチャンクを要求します。 +1. 訪問した各ピアについて、彼らのピアリストを確認し、リストにまだ含まれていないピアを追加します。 +1. すべてのチャンクを取得するまでステップ3を繰り返します。 +::: + +これは、Arweaveネットワークからデータを取得するたびに実行するにはかなりの作業量です。例えば、[https://public-square.g8way.io](https://public-square.g8way.io)のようにツイートのタイムラインを表示しようとした場合、ユーザー体験は長いロード時間やスピナーでひどいものになるでしょう。Arweave上のデータは永久的であるため、元の形式でキャッシュすることが安全であり、トランザクションデータの取得をはるかに迅速かつ容易にします。 + +以下は、arweave.netトランザクションデータキャッシングサービスでキャッシュされたトランザクションデータにアクセスする方法です。 + +### キャッシュされたTXデータの取得 + +`https://arweave.net/TX_ID` + +```js +const res = await axios.get(`https://arweave.net/sHqUBKFeS42-CMCvNqPR31yEP63qSJG3ImshfwzJJF8`) +console.log(res) +``` + +
+Click to view example result + +```json +{ + "data": { + "ticker": "ANT-PENDING", + "name": "pending", + "owner": "NlNd_PcajvxAkOweo7rZHJKiIJ7vW1WXt9vb6CzGmC0", + "controller": "NlNd_PcajvxAkOweo7rZHJKiIJ7vW1WXt9vb6CzGmC0", + "evolve": null, + "records": { + "@": "As-g0fqvO_ALZpSI8yKfCZaFtnmuwWasY83BQ520Duw" + }, + "balances": { + "NlNd_PcajvxAkOweo7rZHJKiIJ7vW1WXt9vb6CzGmC0": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "public,must-revalidate,max-age=2592000", + "content-length": "291", + "content-type": "application/json; charset=utf-8" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": [ + "xhr", + "http" + ], + "transformRequest": [ + null + ], + "transformResponse": [ + null + ], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "method": "get", + "url": "https://arweave.net/sHqUBKFeS42-CMCvNqPR31yEP63qSJG3ImshfwzJJF8" + }, + "request": {} +} + +``` +
+
+ +各Arweaveピア/ノードは、しばしば複製されたゲートウェイであるHTTPエンドポイントも公開しています。ArweaveピアのHTTPエンドポイントについては、こちらで詳しく読むことができます。 + +### 生トランザクションの取得 +`https://arweave.net/raw/TX_ID` +```js +const result = await fetch('https://arweave.net/raw/rLyni34aYMmliemI8OjqtkE_JHHbFMb24YTQHGe9geo') + .then(res => res.json()) + console.log(JSON.stringify(result)) +``` + +
+Click to view example result + +```json +{ + "manifest": "arweave/paths", + "version": "0.1.0", + "index": { + "path": "index.html" + }, + "paths": { + "index.html": { + "id": "FOPrEoqqk184Bnk9KrnQ0MTZFOM1oXb0JZjJqhluv78" + } + } +} +``` + +
+
+ +### Get by field +`https://arweave.net/tx/TX_ID/FIELD` + +Available fields: id | last_tx | owner | target | quantity | data | reward | signature +```js +const result = await fetch('https://arweave.net/sHqUBKFeS42-CMCvNqPR31yEP63qSJG3ImshfwzJJF8/data') + .then(res => res.json()) + console.log(JSON.stringify(result)) +``` + +
+Click to view example result + +```json +{ + "ticker":"ANT-PENDING", + "name":"pending", + "owner":"NlNd_PcajvxAkOweo7rZHJKiIJ7vW1WXt9vb6CzGmC0", + "controller":"NlNd_PcajvxAkOweo7rZHJKiIJ7vW1WXt9vb6CzGmC0", + "evolve":null, + "records": { + "@":"As-g0fqvO_ALZpSI8yKfCZaFtnmuwWasY83BQ520Duw" + }, + "balances":{"NlNd_PcajvxAkOweo7rZHJKiIJ7vW1WXt9vb6CzGmC0":1} +} +``` +
+
+ +### ウォレット残高の取得 +返される残高はWinston単位です。$ARでの残高を取得するには、残高を1000000000000で割ります。 +`https://arweave.net/wallet/ADDRESS/balance` +```js +const res = await axios.get(`https://arweave.net/wallet/NlNd_PcajvxAkOweo7rZHJKiIJ7vW1WXt9vb6CzGmC0/balance`) +console.log(res) +console.log(res.data / 1000000000000) + +6638463438702 // Winston +6.638463438702 // $AR +``` + +### トランザクションのステータス取得 +`https://arweave.net/tx/TX_ID/status` +::: tip +このエンドポイントはネイティブのArweaveトランザクションのみをサポートしています。トランザクションは、成功した応答を得る前に確認される必要があります。 +::: + +```js + const result = await fetch('https://arweave.net/tx/EiRSQExb5HvSynpn0S7_dDnwcws1AJMxoYx4x7nWoho/status').then(res => res.json()) + console.log(JSON.stringify(result)) +``` +
+Click to view example result + +```json +{ + "block_height":1095552,"block_indep_hash":"hyhLEyOw5WcIhZxq-tlnxhnEFgKChKHFrMoUdgIg2Sw0WoBMbdx6uSJKjxnQWon3","number_of_confirmations":10669 +} + +``` +
+
+ + + +### Get network information + +```js +const res = await axios.get('https://arweave.net/info') +console.log(res.data) +``` + +
+Click to view example result + +```json +{ + "network": "arweave.N.1", + "version": 5, + "release": 53, + "height": 1106211, + "current": "bqPU_7t-TdRIxgsja0ftgEMNnlGL6OX621LPJJzYP12w-uB_PN4F7qRYD-DpIuRu", + "blocks": 1092577, + "peers": 13922, + "queue_length": 0, + "node_state_latency": 0 +} + +``` +
+
+ + diff --git a/docs/src/ja/guides/posting-transactions/README.md b/docs/src/ja/guides/posting-transactions/README.md new file mode 100644 index 0000000..4fb920a --- /dev/null +++ b/docs/src/ja/guides/posting-transactions/README.md @@ -0,0 +1,10 @@ +--- +locale: ja +--- +トランザクションの投稿に関するコアコンセプトに添付された例を参照してください。 + +- [arweave-js](/guides/posting-transactions/arweave-js.md) の例 +- [dispatch](/guides//posting-transactions/dispatch.md) の例 +- [arseeding-js](/guides//posting-transactions/arseeding-js.md) の例 +- [turbo](/guides//posting-transactions/turbo.md) の例 +- [akord](/guides/posting-transactions/akord.md) の例 \ No newline at end of file diff --git a/docs/src/ja/guides/posting-transactions/akord.md b/docs/src/ja/guides/posting-transactions/akord.md new file mode 100644 index 0000000..e577148 --- /dev/null +++ b/docs/src/ja/guides/posting-transactions/akord.md @@ -0,0 +1,107 @@ +--- +locale: ja +--- +# Akordを使用したトランザクションの投稿 + +Akord APIを介してArweaveにトランザクションを直接投稿できます。新しい依存関係をコードに追加することなく、シンプルなHTTPで済みます。 + +## はじめに + +始めるには、以下の2つが必要です: + +- [Akordアカウントを作成(100MB無料)](https://v2.akord.com/signup) + +- [こちらでAPIキーを取得](https://v2.akord.com/account/developers) + +## HTTP API + +```js +import fs from "fs"; + +const data = fs.readFileSync('PATH_TO_YOUR_FILE_HERE'); + +// add some custom tags to the transaction +const tags = [ + { + name: "Title", + value: "My first Arweave file" + }, + { + name: "Type", + value: "image" + } +]; + +// encode tags to base64 +const jsonTags = JSON.stringify(tags); +const encodedTags = Buffer.from(jsonTags).toString('base64'); + +const response = await fetch('https://api.akord.com/files', { + method: 'POST', + headers: { + 'Accept': 'application/json', + 'Api-Key': 'YOUR_API_KEY_HERE', + 'Content-Type': 'YOUR_FILE_MIME_TYPE_HERE', // see: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types + 'Tags': encodedTags + }, + body: data +}); +const body = await response.json(); +console.log(body); +``` + +これで完了です!ファイルをArweaveにアップロードしました。以下は、レスポンスボディの例です: + +```json +{ + "id": "a6f1fbfc-403d-4607-b648-4b949fdd50bd", + // technical id of upload. can be used to get metadata of the upload or file binary from Akord cache + "mimeType": "image/jpeg", // depends on content-type of upload, goes as a tag + "sizeInBytes": 437432, + "cloud": { + "uri": "a6f1fbfc-403d-4607-b648-4b949fdd50bd", // same as ID + "url": "https://api.akord.com/files/a6f1fbfc-403d-4607-b648-4b949fdd50bd", // url to binary served from Akord cache + }, + "tx": { + "id": "LAWVdsBRTkUF8ptiEwiU6n4Q-_5ukBJIFmeAllX7Q0E", // fixed ID of Arweave transaction (ANS-104 data item ID) + "status": "scheduled", // indicates where is your file in Arweave bundling context: + // scheduled - file is in Akord cache and is scheduled for ANS-104 bundling + // verification - file is being verified for malicious content + // blocked - file is recognized as malicious, won't go to Arweave + // bundled - file is bundled and is scheduled for posting + // pending - file was posted to Arweave + // committed - file is confirmed on Arweave + // rejected - this indicates a technical problem with our bundling service + "tags": [ + { + "name": "Title", + "value": "My first Arweave file" + }, + { + "name": "Type", + "value": "image" + }, + { + "name": "Content-Type", + "value": "image/jpeg" + } + ], // your Arweave tags appended to transaction + "statusUrl": "https://api.akord.com/files/a6f1fbfc-403d-4607-b648-4b949fdd50bd/status", + // check file status endpoint, returns similar JSON schema + "gatewayUrls": [ + "https://arweave.net/LAWVdsBRTkUF8ptiEwiU6n4Q-_5ukBJIFmeAllX7Q0E", + // this url will only work when file is in 'committed' status + "https://akrd.net/LAWVdsBRTkUF8ptiEwiU6n4Q-_5ukBJIFmeAllX7Q0E" + // Akord instance of Arweave gateway - this url will work always, even right after upload since it falls back to Akord cache when file is not yet on Arweave + ], + "viewblockUrl": "https://viewblock.io/arweave/tx/LAWVdsBRTkUF8ptiEwiU6n4Q-_5ukBJIFmeAllX7Q0E", // see your file on ViewBlock - this url will only work when file is in 'committed' status & indexed by ViewBlock + "info": "Transaction is visible on the blockchain indexers when in the \"committed\" status.", + } +} +``` + +## リソース +- トランザクションを投稿する方法の概要は、[Posting Transactions](../../concepts/post-transactions.md)セクションを参照してください。 +- Akord APIを使用してArweaveにファイルをアップロードする方法のさらなる例は、[こちら](https://docs.akord.com/api-and-dev-tools/quickest-way-to-upload-to-arweave)で見つけられます。 +- Akord APIの完全なドキュメントは、[こちら](https://api.akord.com/docs)で確認できます。 +- バンドルに関する詳細は、[ANS-104 Standard](https://specs.g8way.io/#/view/xwOgX-MmqN5_-Ny_zNu2A8o-PnTGsoRb_3FrtiMAkuw)をご覧ください。 \ No newline at end of file diff --git a/docs/src/ja/guides/posting-transactions/arseeding-js.md b/docs/src/ja/guides/posting-transactions/arseeding-js.md new file mode 100644 index 0000000..b3fe734 --- /dev/null +++ b/docs/src/ja/guides/posting-transactions/arseeding-js.md @@ -0,0 +1,55 @@ +--- +locale: ja +--- +# arseeding.jsを使用したトランザクションの投稿 +`arseeding-js` JavaScript SDKパッケージを使用して、Arweaveネットワーク上でトランザクションを公開できます。Arseedingは、トランザクションをネットワーク内のすべてのArweaveノードに自動的にブロードキャストし、トランザクションがすべてのArweaveノードの保留プールに迅速に受信されることを保証します。これにより、トランザクションのパッケージング速度が向上します。 + +## arseeding.jsのインストール +`arseeding.js`をインストールするには、次のコマンドを実行します: + + + + + +```console:no-line-numbers +npm install arseeding-js +``` + + + + +```console:no-line-numbers +yarn add arseeding-js +``` + + + + + +## データをアップロードするためのトランザクション +Arseedingを使用する場合、[everpay](https://app.everpay.io/)でアカウントに事前に資金を入れておく必要があります。この残高は、$ARトークンまたは他の暗号通貨で資金を供給できます。もう1つの違いは、Arseedingサービスがあなたのデータをブロックチェーンに確実に載せることを保証する点です。 + +```js:no-line-numbers +const { genNodeAPI } = require('arseeding-js') + +const run = async () => { + const instance = genNodeAPI('YOUR PRIVATE KEY') + const arseedUrl = 'https://arseed.web3infra.dev' + const data = Buffer.from('........') + const payCurrencyTag = 'ethereum-usdc-0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48' // everPay supported token tag (chainType-symbol-id) + const options = { + tags: [{ name: 'Content-Type', value: 'image/png' }] + } + const res = await instance.sendAndPay(arseedUrl, data, payCurrencyTag, options) + console.log('res', res) +} +run() +``` + + +## リソース +* トランザクションを公開するためのすべてのメソッドの概要については、操作マニュアルの[Publishing Transactions](../../concepts/post-transactions.md)セクションを参照してください。 + +* 完全なArseedingのドキュメントは、[Arseedingのウェブサイト](https://web3infra.dev/docs/arseeding/introduction/lightNode/)で確認できます。 + +* Arseeding Upload Manifestチュートリアルは[こちら](https://web3infra.dev/docs/arseeding/sdk/arseeding-js/manifest/)でフォローしてください。 \ No newline at end of file diff --git a/docs/src/ja/guides/posting-transactions/arweave-js.md b/docs/src/ja/guides/posting-transactions/arweave-js.md new file mode 100644 index 0000000..df68698 --- /dev/null +++ b/docs/src/ja/guides/posting-transactions/arweave-js.md @@ -0,0 +1,104 @@ +--- +locale: ja +--- +# arweave-jsを使用したトランザクションの投稿 + +Arweaveのネイティブトランザクションは、`arweave-js`パッケージを使用してノードまたはゲートウェイに直接投稿できます。 + +::: info +Arweaveはトランザクションバンドルを使用することでスケールします。これにより、各ブロックにほぼ無制限のトランザクションを含めることが可能になります。バンドルを使用しない場合、Arweaveブロックは1ブロックあたり最大1000トランザクションに制限されます(新しいブロックは約2分ごとに生成されます)。あなたのユースケースがこの容量を超える場合、トランザクションがドロップされることがあります。このような場合は、[irys.xyz](./irys.md)や類似のサービスを使用してトランザクションをバンドルすることを検討してください。 +::: + +## arweave-jsパッケージのインストール + +`arweave-js`をインストールするには、次のコマンドを実行します。 + + + + +```console:no-line-numbers +npm install --save arweave +``` + + + + +```console:no-line-numbers +yarn add arweave +``` + + + + + + +::: info +NodeJSを使用する場合、NodeJSの最小バージョンは18以上が必要です。 +::: + +## arweave-jsの初期化 + +Layer 1トランザクションは、`arweave-js`ライブラリを使用して投稿されます。 + +```js:no-line-numbers +import Arweave from 'arweave'; +import fs from "fs"; + +// load the JWK wallet key file from disk +let key = JSON.parse(fs.readFileSync("walletFile.txt").toString()); + +// initialize an arweave instance +const arweave = Arweave.init({}); +``` + +## ウォレット間トランザクションの投稿 + +ARトークンを1つのウォレットアドレスから別のウォレットアドレスに移動する基本的なトランザクション。 + +```js:no-line-numbers +// create a wallet-to-wallet transaction sending 10.5AR to the target address +let transaction = await arweave.createTransaction({ + target: '1seRanklLU_1VTGkEk7P0xAwMJfA7owA1JHW5KyZKlY', + quantity: arweave.ar.arToWinston('10.5') +}, key); + +// you must sign the transaction with your key before posting +await arweave.transactions.sign(transaction, key); + +// post the transaction +const response = await arweave.transactions.post(transaction); +``` + +## データトランザクションの投稿 + +この例では、ディスクからファイルを読み込み、そのデータをネットワークに保存するためのトランザクションを作成する方法を示します。ネットワークが請求している現在の価格は、[https://ar-fees.arweave.dev](https://ar-fees.arweave.dev)で確認できます。 + +```js:no-line-numbers +// load the data from disk +const imageData = fs.readFileSync(`iamges/myImage.png`); + +// create a data transaction +let transaction = await arweave.createTransaction({ + data: imageData +}, key); + +// add a custom tag that tells the gateway how to serve this data to a browser +transaction.addTag('Content-Type', 'image/png'); + +// you must sign the transaction with your key before posting +await arweave.transactions.sign(transaction, key); + +// create an uploader that will seed your data to the network +let uploader = await arweave.transactions.getUploader(transaction); + +// run the uploader until it completes the upload. +while (!uploader.isComplete) { + await uploader.uploadChunk(); +} +``` + +## リソース + +- トランザクションを投稿するためのすべての方法の概要については、操作マニュアルの[Posting Transactions](../../concepts/post-transactions.md)セクションを参照してください。 + +- `arweave-js`のすべての機能の詳細な説明については、[GitHubのドキュメント](https://github.com/ArweaveTeam/arweave-js)をご覧ください。 \ No newline at end of file diff --git a/docs/src/ja/guides/posting-transactions/dispatch.md b/docs/src/ja/guides/posting-transactions/dispatch.md new file mode 100644 index 0000000..da56c43 --- /dev/null +++ b/docs/src/ja/guides/posting-transactions/dispatch.md @@ -0,0 +1,33 @@ +--- +locale: ja +--- +# Dispatchを使用したトランザクションの投稿 + +Arweaveのブラウザウォレットには、トランザクションをディスパッチするという概念があります。トランザクションが100KB未満の場合、無料で投稿できます! + +## トランザクションのディスパッチ + +クライアントアプリに依存するパッケージは必要ありません。ユーザーがブラウザウォレットをアクティブにしており、データが100KB未満であれば、ディスパッチされたトランザクションは無料で、ネットワーク上での確認が保証されます。 + + + + +```js:no-line-numbers +// use arweave-js to create a transaction +let tx = await arweave.createTransaction({ data:"Hello World!" }) + +// add some custom tags to the transaction +tx.addTag('App-Name', 'PublicSquare') +tx.addTag('Content-Type', 'text/plain') +tx.addTag('Version', '1.0.1') +tx.addTag('Type', 'post') + +// use the browser wallet to dispatch() the transaction +let result = await window.arweaveWallet.dispatch(tx); + +// log out the transactino id +console.log(result.id); +``` + +## リソース +* トランザクションを投稿するためのすべての方法の概要については、操作マニュアルの[Posting Transactions](../../concepts/post-transactions.md)セクションを参照してください。 diff --git a/docs/src/ja/guides/posting-transactions/turbo.md b/docs/src/ja/guides/posting-transactions/turbo.md new file mode 100644 index 0000000..fedbf7d --- /dev/null +++ b/docs/src/ja/guides/posting-transactions/turbo.md @@ -0,0 +1,193 @@ +--- +locale: ja +--- +# Ardrive Turboを使用したトランザクションの投稿 + +Turboを使用してトランザクションを投稿するには、`@ardrive/turbo-sdk` JavaScriptパッケージを利用します。 + +## @ardrive/turbo-sdkのインストール + +`@ardrive/turbo-sdk`をインストールするには、次のコマンドを実行します。 + + + + + +```console:no-line-numbers +npm install @ardrive/turbo-sdk +``` + + + + +```console:no-line-numbers +yarn add @ardrive/turbo-sdk +``` + + + + +## Turboクライアントの初期化 + +`turbo` SDKを使用してデータをアップロードする方法はいくつかあります。次のことができます: + +- `file`をアップロード +- `data-item`をアップロード + +`turbo` SDKを使用して`data-item`をアップロードする場合、`ar-bundles`を使用して`data-item`を作成し、`tags`を追加します。 + +### データアイテム(推奨) + +```js +import fs from 'node:fs' +import { TurboFactory } from '@ardrive/turbo-sdk/node'; +import { ArweaveSigner, createData } from 'arbundles'; + + +if (!process.env.PATH_TO_WALLET) { + console.error("Please set PATH_TO_WALLET in your env.") + process.exit() +} + +const JWK = JSON.parse(fs.readFileSync(process.env.PATH_TO_WALLET).toString()); + +const turbo = TurboFactory.authenticated({ privateKey: JWK, }); + +const signer = new ArweaveSigner(JWK); +``` + +### File +```js +import { TurboFactory } from '@ardrive/turbo-sdk/node'; +import fs from 'fs'; + +if (!process.env.PATH_TO_WALLET) { + console.error("Please set PATH_TO_WALLET in your env.") + process.exit() +} + +const JWK = JSON.parse(fs.readFileSync(process.env.PATH_TO_WALLET).toString()); + +const turbo = TurboFactory.authenticated({ privateKey: JWK }); + +const filePath = new URL('path/to/file', import.meta.url).pathname; +const fileSize = fs.statSync(filePath).size; +const dataItemOpts = { + //target: , + // anchor: , + tags: [{name: 'test', value: 'test'}] // add tags + } + const uploadResult = await turbo.uploadFile({ + fileStreamFactory: () => fs.createReadStream(filePath), + fileSizeFactory: () => fileSize, + signal: AbortSignal.timeout(10_000), // Optional: cancel the upload after 10 seconds + dataItemOpts // Optional + }); + console.log(JSON.stringify(uploadResult, null, 2)); +``` + +Example Output: + +```console +{ + "id": "1mPoz28tMAnYecZTya4g6cHSIQz37zAAwr_uC0IUcxU", + "timestamp": 1704990130970, + "winc": "0", + "version": "0.2.0", + "deadlineHeight": 1341385, + "dataCaches": [ + "arweave.net" + ], + "fastFinalityIndexes": [ + "arweave.net" + ], + "public": "j0Ki2cJHca6HoC4B3y0ZxFKEe9c539AO5KlfDj76KpWOSx5xtbiDUndEWmJxE-p9ayAI8nF5sSJeRfNpuD4g831fmUbTFvUXKNKcfLJ4knDewyY7YNtVGcjBrNRDbsMPhC6UKiquyewRhBlu3YNyEvC9hV4otuwgGI1QcPQmqL9lztpSbwtV00qQIhYAyDbUCmPU6GMPjgk3o-YTDam0rny80tJnxQu5xvLAH3x-nnaAYVsc4-oDvpKKDzq-i5GzSZAFfiWXlYs80fts0Y-T2w3649IgHIjvPy72jYS6y02HKaL9guTczSQfa5ILhE0XotIFgjTkP0LEhHNVmrG7XA5XyKdgV3tyWi1qPrHs-Se5miuZsD0Mz_tBiVZ_AmqQbUYAmyYmEnuB_NpWJoBj18ItZfP1Bq7BvjriJJmpsOab95hEkQCEJHSHRAkH72aS_oz-bM6lymNtOj68NGzTZ0y0hq9b2FSKFhQbrxQpGSbQQ4p6tnoKF_B2n1xTE1xAU3R5Ju-2CZsGCW6kf2JBVTvyQrU5njVHeAS5niOkaJEzlEoaHvaSZF48AvMKB1nZCKG3xbHdQA8EGWNJ_7D-L5BbH2-7Y6CY-9KNS7HMIFTp39lqWzMJ4gyQzDzOh1vaG8bckm0CSqB9WXJxKNALgOpQmvGKDHZIODDSyZ1b8GE", + "signature": "D58BO0hRPeqkQ_m9SFRiZze1CHZzxek-grsAs0xSsfzi6FNUQDDZyzadX4cd4aWxJaw4APti-lFHjh8_eUfwO2Qblo5wY-WDi3DU9LPasdzu4P0QFhsWk_hZwQslunAtH8NnPdbD8cnfeHKabvVcpXRDwndQX-7TJwjndAHDEFuN1fB-t445i8_z6GK4XYSgM253gFcL_KC0gD5UUcxLk5OGNPuDXPKIAVPsHGzzx4861t4BvB8EYo2YRpveu3LA6bRdXbG4q312JdUZMTBoZP1-QqwcHiFtQg2YLMZAM07YbyTMaTwMa6l3EhffpDuZ_llAWtQjlDw5egu4rnWxPZos17bSN-ReiH_NTBKjlHz54gBa-Q2YT58qXEj2XzfpIENdlhVxjmmWmIiMtrr58oOws9mB5yyIFHeXUbk1U4EZc7mbNDEEmDjTpHnAIVM83aGDOux7H2UpDV9UMBPYS1CX_huW4ACXJ6XqLH5E6Kc6_WXWUwEsoGKarK0A1WiDpKhGkA41KgKHLZ5CbACJ0bWoaa4YBLQgFjowZXwDsn3s6t78aAqpx_meVI67Eg4P7ELDish8CY9NcMHMXeEBHsctNHtCdJXQLRWf6CyYkmf2T7ym1DP4R58FkpBpkVXEUadFyshJe0nfB9ie17f_njuPpKWN3d2OODZVarxtRsI", + "owner": "GtDQcrr2QRdoZ-lKto_S_SpzEwiZiHVaj3x4jAgRh4o" +} +``` + +## Posting a `Data-Item` (recommended) + +```js +const signer = new ArweaveSigner(JWK); +const signedDataItem = createData(JSON.stringify({ "some": "data" }), signer, { + tags: [{ name: 'test', value: 'test' }] // add tags +}); +await signedDataItem.sign(signer); + +const uploadResult = await turbo.uploadSignedDataItem({ + dataItemStreamFactory: () => signedDataItem.getRaw(), + dataItemSizeFactory: () => signedDataItem.getRaw().length, + signal: AbortSignal.timeout(10_000), // Optional: cancel the upload after 10 seconds + +}); + +console.log(JSON.stringify(uploadResult, null, 2)); +``` + +Example Output: + +```console +{ + "id": "agcPXVfw92w_JI5v8o6C_Gsixd_BDMaHqNSStX4Eed8", + "timestamp": 1704990453564, + "winc": "0", + "version": "0.2.0", + "deadlineHeight": 1341387, + "dataCaches": [ + "arweave.net" + ], + "fastFinalityIndexes": [ + "arweave.net" + ], + "public": "j0Ki2cJHca6HoC4B3y0ZxFKEe9c539AO5KlfDj76KpWOSx5xtbiDUndEWmJxE-p9ayAI8nF5sSJeRfNpuD4g831fmUbTFvUXKNKcfLJ4knDewyY7YNtVGcjBrNRDbsMPhC6UKiquyewRhBlu3YNyEvC9hV4otuwgGI1QcPQmqL9lztpSbwtV00qQIhYAyDbUCmPU6GMPjgk3o-YTDam0rny80tJnxQu5xvLAH3x-nnaAYVsc4-oDvpKKDzq-i5GzSZAFfiWXlYs80fts0Y-T2w3649IgHIjvPy72jYS6y02HKaL9guTczSQfa5ILhE0XotIFgjTkP0LEhHNVmrG7XA5XyKdgV3tyWi1qPrHs-Se5miuZsD0Mz_tBiVZ_AmqQbUYAmyYmEnuB_NpWJoBj18ItZfP1Bq7BvjriJJmpsOab95hEkQCEJHSHRAkH72aS_oz-bM6lymNtOj68NGzTZ0y0hq9b2FSKFhQbrxQpGSbQQ4p6tnoKF_B2n1xTE1xAU3R5Ju-2CZsGCW6kf2JBVTvyQrU5njVHeAS5niOkaJEzlEoaHvaSZF48AvMKB1nZCKG3xbHdQA8EGWNJ_7D-L5BbH2-7Y6CY-9KNS7HMIFTp39lqWzMJ4gyQzDzOh1vaG8bckm0CSqB9WXJxKNALgOpQmvGKDHZIODDSyZ1b8GE", + "signature": "QNgpeIZrgJ3mu3NB9iZeyXGeKJaZ_Efp-QQd7_gbAp2Z1WhqWnQHtf_uKjLOf7sfNZLyo1igMwXv0LMmILr0QRsx1bVQ1WSAHnJb11F7YEoyfiD7veSEJ-0284NIO7Ixy_AQqf5X41kmL5025Oy1NY6jy7ftQ-hBSs3jyQ0_Af1-6SZ8VAnsIQW-G2vXIralVyTkYm49USKYL8vok4Twh1ICCDj-NMqBSBtDA5lL4pmZ06OXi7jZ1dR3QDBKtD6YdomdM5ccmfyNDb95c7A-uqwVp87R5kZnMIVfQ7JhZdCrTly2dwhW6yIA6tyHSRHmP_n2esALj2_R2uYxJnU-uCE2934YFFQX-jxOchUB3vWBIYzL-v-iY0eWRQZqg5lCYMhZ8jnwrBun_e1N_9-ODsD1nnHs0fEqqrTqnEoKQRJTbIN8qmBJbPlulRmPI_x0O-601UuUQ-6BmghzXZLaQvklMwMrzEI0A3FShM7ZY0zfXj8PUB-4BSUSHXQlyT697DGYTAOuClUXs39SFp2mPP7voeMOKFUr8r0xi52pJcesAhKQOmIqMVjywqwS9089t5-JPKbA6JZKLygMZdxJ3evq7Dq9Y6K6scM2TXT6Tr7w2cP1_jNc0fomo6WjUt3y1KY1WYphmgVG_6_oMZigAK1itwtLAOQ_43PMefla7OE", + "owner": "GtDQcrr2QRdoZ-lKto_S_SpzEwiZiHVaj3x4jAgRh4o" +} +``` + +## Posting a `File` + +```js +const filePath = new URL('path/to/file', import.meta.url).pathname; +const fileSize = fs.statSync(filePath).size; +const dataItemOpts = { + //target: 'string', + // anchor: 'string', + tags: [{name: 'test', value: 'test'}] // add tags + } +const uploadResult = await turbo.uploadFile({ + fileStreamFactory: () => fs.createReadStream(filePath), + fileSizeFactory: () => fileSize, + signal: AbortSignal.timeout(10_000), // Optional: cancel the upload after 10 seconds + dataItemOpts // Optional +}); +console.log(JSON.stringify(uploadResult, null, 2)); +``` + +Example Output: + +```console +{ + "id": "68h8-kGbKGJMQD8nOCsRl_0mJKpxQSpmL42OJq5nCxQ", + "timestamp": 1704990009421, + "winc": "0", + "version": "0.2.0", + "deadlineHeight": 1341384, + "dataCaches": [ + "arweave.net" + ], + "fastFinalityIndexes": [ + "arweave.net" + ], + "public": "j0Ki2cJHca6HoC4B3y0ZxFKEe9c539AO5KlfDj76KpWOSx5xtbiDUndEWmJxE-p9ayAI8nF5sSJeRfNpuD4g831fmUbTFvUXKNKcfLJ4knDewyY7YNtVGcjBrNRDbsMPhC6UKiquyewRhBlu3YNyEvC9hV4otuwgGI1QcPQmqL9lztpSbwtV00qQIhYAyDbUCmPU6GMPjgk3o-YTDam0rny80tJnxQu5xvLAH3x-nnaAYVsc4-oDvpKKDzq-i5GzSZAFfiWXlYs80fts0Y-T2w3649IgHIjvPy72jYS6y02HKaL9guTczSQfa5ILhE0XotIFgjTkP0LEhHNVmrG7XA5XyKdgV3tyWi1qPrHs-Se5miuZsD0Mz_tBiVZ_AmqQbUYAmyYmEnuB_NpWJoBj18ItZfP1Bq7BvjriJJmpsOab95hEkQCEJHSHRAkH72aS_oz-bM6lymNtOj68NGzTZ0y0hq9b2FSKFhQbrxQpGSbQQ4p6tnoKF_B2n1xTE1xAU3R5Ju-2CZsGCW6kf2JBVTvyQrU5njVHeAS5niOkaJEzlEoaHvaSZF48AvMKB1nZCKG3xbHdQA8EGWNJ_7D-L5BbH2-7Y6CY-9KNS7HMIFTp39lqWzMJ4gyQzDzOh1vaG8bckm0CSqB9WXJxKNALgOpQmvGKDHZIODDSyZ1b8GE", + "signature": "fSuRHFXbuWAuIIEAquGD5hwOLU8uy0sVAu3mCwyitRlxI2wDgB8F_8mrF4dsv8-Jab3jb8vjVB0LrRWlStCGTnL3JStr0C8d-UdTHyQk3EfWPmikrZuE1cHdBjTyys9Y-8lmGR0bY5fT8GA_xj48coQhNNKSU4MYvo9m0stAY7Vy5dnzp0xOvyvZuWzlLzQqwsI-1nNMCh9LvVUenGO-yOArUNNeCGL2y55qnNcFpCs8TDla3plRiddND5CkR3vkLWpMAa_irBYXB2m3ekIqGmBTBbww0YjAR9AUt9PXKibysrbADvDEa5siWEPEa48dVwLes5PtSw9s6e8X6ief8Y3cUX5QPqnPTv5Bb4T51HutMuSb2Dj78_G4tBjrkfZKUNu3U9uOBWp8fZ-N4E1buvkuM9-yAtsfRfrUfxmwdNZ9KFGuog-ffJ0lor6sdq_CjUTUo4RkwvQcOI5nZi2_AGEsfoDTusqio2pbps7E8zgU4op2vQSxZXGoYaMPrKxA6HIptPP3rZVbXJMLfSccesjylkGozdQZaWtXdhbQKRmCYouSUWMuxngCRaHVA-W1ImU-4fyX3aRi4XNZBT3b63D_QwU-cI7zlUWnEkX6E79MFlWJoVXNm94fP92wGZUsesogsiifqMBIelkHW9Otr76XFr140AsTpyZj3wqPDEc", + "owner": "GtDQcrr2QRdoZ-lKto_S_SpzEwiZiHVaj3x4jAgRh4o" +} +``` + +## リソース + +- [コード](https://github.com/ardriveapp/turbo-sdk)を確認 +- [ArDrive Discord](https://discord.com/invite/ya4hf2H)で議論に参加 \ No newline at end of file diff --git a/docs/src/ja/guides/querying-arweave/ar-gql.md b/docs/src/ja/guides/querying-arweave/ar-gql.md new file mode 100644 index 0000000..be21647 --- /dev/null +++ b/docs/src/ja/guides/querying-arweave/ar-gql.md @@ -0,0 +1,72 @@ +--- +locale: ja +--- +# ar-gql +このパッケージはGraphQLの上に構築された最小限のレイヤーで、クエリ変数を使用したパラメータ化クエリをサポートしています。また、ページネーションされた結果の管理も実装されています。 + +## インストール + +To install `ar-gql run + + + +```console:no-line-numbers +npm i ar-gql +``` + + + +```console:no-line-numbers +yarn add ar-gql +``` + + + +## Example +```js:no-line-numbers +import { arGql } from "ar-gql" + +const argql = arGql() + +(async () => { + let results = await argql.run(`query( $count: Int ){ + transactions( + first: $count, + tags: [ + { + name: "App-Name", + values: ["PublicSquare"] + }, + { + name: "Content-Type", + values: ["text/plain"] + }, + ] + ) { + edges { + node { + id + owner { + address + } + data { + size + } + block { + height + timestamp + } + tags { + name, + value + } + } + } + } + }`, {count: 1}); + console.log(results); +})(); +``` + +## リソース +* [ar-gql GitHubページ](https://github.com/johnletey/arGql) \ No newline at end of file diff --git a/docs/src/ja/guides/querying-arweave/ardb.md b/docs/src/ja/guides/querying-arweave/ardb.md new file mode 100644 index 0000000..8345d9f --- /dev/null +++ b/docs/src/ja/guides/querying-arweave/ardb.md @@ -0,0 +1,55 @@ +--- +locale: ja +--- +# ArDB +GraphQLの上に構築されたライブラリで、GraphQLのパラメータ名を暗記することなく、Arweaveからトランザクションおよびブロックデータをクエリすることができます。お気に入りのコードエディタでオートコンプリートを使用してクエリを構築するだけです。 + +## Installation +```console:no-line-numbers +yarn add ardb +``` + +## Example +```js:no-line-numbers +import Arweave from 'arweave'; +import ArDB from 'ardb'; + +// initialize an arweave instance +const arweave = Arweave.init({}); + +// arweave is Arweave Client instance +const ardb = new ArDB(arweave); + +// Get a single transaction by its id +const tx = await ardb.search('transaction') + .id('A235HBk5p4nEWfjBEGsAo56kYsmq7mCCyc5UZq5sgjY') + .findOne(); + +// Get an array of transactions and include only the first result +const txs = await ardb.search('transactions') + .appName('SmartWeaveAction') + .findOne(); + +// This is the same as doing: +const txs = await ardb.search('transactions') + .tag('App-Name', 'SmartWeaveAction') + .limit(1) + .find(); + +// Search for multiple transactions from a specific owner/wallet address +const txs = await ardb.search('transactions') + .from('BPr7vrFduuQqqVMu_tftxsScTKUq9ke0rx4q5C9ieQU') + .find(); + +// Continue paging though the results with... +const newTxs = await ardb.next(); + +// Or you could get all results at once by doing: +const txs = await ardb.search('blocks') + .id('BkJ_h-GGIwfek-cJd-RaJrOXezAc0PmklItzzCLIF_aSk36FEjpOBuBDS27D2K_T') + .findAll(); + +``` + +## リソース +* [ArDB NPMパッケージ](https://www.npmjs.com/package/ardb) \ No newline at end of file diff --git a/docs/src/ja/guides/querying-arweave/queryingArweave.md b/docs/src/ja/guides/querying-arweave/queryingArweave.md new file mode 100644 index 0000000..123df1a --- /dev/null +++ b/docs/src/ja/guides/querying-arweave/queryingArweave.md @@ -0,0 +1,186 @@ +--- +locale: ja +--- +# ArweaveをGraphQLでクエリする +Arweaveはトランザクションをクエリし、[タグ](../concepts/tags.md)でフィルタリングするための簡単な方法を提供しています。ArweaveのGraphQL対応インデックスサービスは、ユーザーがGraphQLクエリを送信できるエンドポイントを提供し、クエリを試すためのプレイグラウンドも提供しています。 + +[GraphQL](https://graphql.org)は、サービスがクライアントがクエリできるカスタマイズされたデータスキーマを構築するために使用できる柔軟なクエリ言語です。GraphQLはまた、クライアントが結果に表示したいデータ構造の要素を指定することも可能にします。 + +## 公開インデックスサービス + +- [arweave.net graphql](https://arweave.net/graphql) 元のgraphqlエンドポイント、[ar.io](https://ar.io)によって管理されています。 +- [goldsky検索サービス](https://arweave-search.goldsky.com/graphql) 特に検索用に最適化された公開サービス、[goldsky](https://goldsky.com)によって管理されています。 +- [ar.io分散インデックス](https://ar-io.dev/graphql) 分散型インデックスサービスのネットワーク。現在、L1トランザクションでテスト中です。 +- [knn3 arseedingインデックス](https://knn3-gateway.knn3.xyz/arseeding/graphql) arseeding取引用のリアルタイムクエリサービスです。 + +## GraphQLクエリの実行 +Arweaveをクエリするには、GraphQLをサポートするインデックスサービスを介してアクセスする必要があります。上記のGraphQLプレイグラウンドのいずれかを使用して始めましょう! + +以下のクエリをコピーして貼り付けます + +```graphql:no-line-numbers +query { + transactions(tags: [{ + name: "App-Name", + values: ["PublicSquare"] + }]) + { + edges { + node { + id + tags { + name + value + } + } + } + } +} +``` + + + +GraphQLに不慣れな場合、最初は少し圧倒されるかもしれませんが、構造を知ると、読みやすく理解しやすいものです。 + +```text:no-line-numbers +query { ( ) { } } +``` +貼り付けた例のクエリでは、``が`transactions`ですが、`blocks`をクエリすることもできます。ArweaveのGraphQLスキーマの完全な説明は、[Arweave GraphQL Guide](https://gql-guide.arweave.dev)に書かれています。このガイドでは、`filter criteria`を「クエリ構造」と呼び、`transactions`および`blocks`の完全なデータ構造定義を「データ構造」と呼んでいます。 + +``に関して言えば、興味のあるデータ構造のサブセットを指定できることが重要です。たとえば、トランザクションスキーマの完全なデータ構造は[こちらにリストされています](https://gql-guide.arweave.dev/#full-data)。 + +この場合、フィルタ基準に一致するトランザクションの`id`と完全な`tags`リストに興味があります。 + +プレイグラウンドの中央にある大きな「再生」ボタンをクリックしてクエリを実行します。 + +![image](https://arweave.net/rYfVvFVKLFmmtXmf8KeTvsG8avUXMQ4qOBBTZRHqVU0) + +結果データ構造にリストされたトランザクションが返されるのに気づくでしょう。 + +ブロックチェーンに不慣れな場合、これは予期しないかもしれません。何も構築していないのに、なぜこれらの結果が存在するのでしょうか?実際、フィルタリングした`“PublicSquare”: “App-Name”`タグは、しばらくの間使用されていました。 + +Arweaveプロトコルの創設者であるSam Williamsは、数年前に[githubのコードスニペット](https://gist.github.com/samcamwilliams/811537f0a52b39057af1def9e61756b2)でトランザクション形式を提案しました。それ以来、エコシステム内のビルダーはそれを元に構築し、実験し、これらのタグを使ってトランザクションを投稿してきました。 + +Arweaveのクエリに戻ります。GraphQLの結果には、読み取り可能な投稿メッセージはなく、タグと投稿に関する情報だけが含まれています。 + +これは、GraphQLインデックスサービスがトランザクションやブロックのヘッダーデータのインデックス作成と取得に関心を持っているためであり、それらに関連するデータには関与していないためです。 + +トランザクションのデータを取得するには、別のHTTPエンドポイントを使用して検索する必要があります。 +```text:no-line-numbers +https://arweave.net/ +``` + +クエリ結果の1つの`id`をコピーして、上記のリンクを変更し、`id`を追加します。以下のようになるはずです… + +https://arweave.net/eaUAvulzZPrdh6_cHwUYV473OhvCumqT3K7eWI8tArk + +ブラウザでそのURLにナビゲートすると(HTTP GET)、投稿の内容(トランザクションデータに格納されている)が取得されます。この例では… +```text:no-line-numbers +Woah that's pretty cool 😎 +``` +(Arweave HTTPエンドポイントの完全なリストについては、[HTTP API](https://docs.arweave.org/developers/server/http-api)のドキュメントを参照してください。) + +## JavaScriptからクエリを投稿する +JavaScriptからGraphQLクエリを投稿することは、プレイグラウンドで投稿するのとあまり変わりません。 + +まず、GraphQLエンドポイントへの簡単なアクセスのために`arweave-js`パッケージをインストールします。 +```console:no-line-numbers +npm install --save arweave +``` + +次に、上記の例のクエリのやや高度なバージョンを入力し、結果を`await`します。 + +```js:no-line-numbers +import Arweave from 'arweave'; + +// initialize an arweave instance +const arweave = Arweave.init({}); + +// create a query that selects tx data the first 100 tx with specific tags +const queryObject = { + query: + `{ + transactions( + first:100, + tags: [ + { + name: "App-Name", + values: ["PublicSquare"] + }, + { + name: "Content-Type", + values: ["text/plain"] + } + ] + ) + { + edges { + node { + id + tags { + name + value + } + } + } + } + }` +}; +const results = await arweave.api.post('/graphql', queryObject); +``` + +## 複数のクエリ +GraphQLエンドポイントへの1回のラウンドトリップで複数のクエリを投稿することも可能です。この例では、`arweave-id`プロトコル(現在は`ar-profile`に置き換えられていますが、依然として永久的です)を使用して2つのウォレットアドレスの`name`トランザクションをクエリします。 +```graphql:no-line-numbers +query { + account1: transactions(first: 1, owners:["89tR0-C1m3_sCWCoVCChg4gFYKdiH5_ZDyZpdJ2DDRw"], + tags: [ + { + name: "App-Name", + values: ["arweave-id"] + }, + { + name: "Type", + values: ["name"] + } + ] + ) { + edges { + node { + id + owner { + address + } + } + } + } + account2: transactions(first: 1, owners:["kLx41ALBpTVpCAgymxPaooBgMyk9hsdijSF2T-lZ_Bg"], + tags: [ + { + name: "App-Name", + values: ["arweave-id"] + }, + { + name: "Type", + values: ["name"] + } + ] + ) { + edges { + node { + id + owner { + address + } + } + } + } +} +``` + + +## リソース +* [Arweave GQLリファレンス](../../references/gql.md) +* [ArDBパッケージ](./ardb.md) +* [ar-gqlパッケージ](./ar-gql.md) +* [検索インデックスサービス](./search-indexing-service.md) \ No newline at end of file diff --git a/docs/src/ja/guides/querying-arweave/search-indexing-service.md b/docs/src/ja/guides/querying-arweave/search-indexing-service.md new file mode 100644 index 0000000..e73381a --- /dev/null +++ b/docs/src/ja/guides/querying-arweave/search-indexing-service.md @@ -0,0 +1,229 @@ +--- +locale: ja +--- +# 検索インデックスサービス + +tl;dr + +- Arweave GraphQLとの後方互換性のある構文 +- 複雑なクエリ(例えばマルチタグ検索)のためのより高速な応答時間 +- 追加のクエリオプション +--- + +[Goldsky](https://goldsky.com)の無料検索サービスは、Arweaveのブロックとトランザクションを横断して複雑なクエリをより迅速に検索できる最適化されたバックエンドを利用しており、あいまい検索やワイルドカード検索のユースケースに役立つ追加のクエリ構文も導入しています。 + +検索GraphQL構文は、[Arweave GraphQL構文](./queryingArweave.md)のスーパーセットです。完全に後方互換性があり、同じクエリに対して同じ結果を返しますが、便利な追加の修飾子があります。 + +- 柔軟なタグフィルター + - タグ名または値だけを検索 +- 高度なタグフィルター + - あいまい検索 + - ワイルドカード検索 +- L1トランザクションのみをフィルタリング +- 結果セットの総カウント + +カスタムニーズや機能アイデアがある場合は、GoldskyチームにメールまたはDiscordでお気軽にお問い合わせください! + + +## 検索ゲートウェイエンドポイント + +現在、この構文を持つ唯一のサービスはGoldskyがホストしています。誰かが同じ構文で独自のゲートウェイをホストしたい場合は、[Goldsky](https://goldsky.com)にお問い合わせください。 + +- [Goldsky検索サービス](https://arweave-search.goldsky.com/graphql) + +## 機能 + +### 柔軟なタグフィルター + +検索ゲートウェイ構文はそれほど厳密ではなく、タグ名または値だけを検索できます。 + +#### 例 +タグ値が「cat」のトランザクションを検索 + +```graphql:no-line-numbers +query just_values { + transactions( + first: 10, + tags: [ + { + values: ["cat"] + } + ] + ) + { + edges { + node { + id + tags { + name + value + } + } + } + } +} +``` + +Search for transactions that have an `In-Response-To-ID` + +```graphql:no-line-numbers +query just_name { + transactions( + first: 10, + tags: [ + { + name: "In-Response-To-ID" + } + ] + ) + { + edges { + node { + id + tags { + name + value + } + } + } + } +} +``` + + +### Advanced tag filters + +The Search Gateway Syntax offers an additional parameter to the tag filter, `match`. + +| Match value | Description | +|-------------|-------------| +| EXACT | (default) exact matches only. | +| WILDCARD | Enables * to match any amount of characters, ie. `text/*` | +| FUZZY_AND | Fuzzy match containing all search terms | +| FUZZY_OR | Fuzzy match containing at least one search term | + + +Open up the playground and try some of the following queries! + +Searching all transactions with an image content type using a wildcard +```graphql:no-line-numbers +{ + transactions( + tags: [ + { name: "Content-Type", values: "image/*", match: WILDCARD} + ] + first: 10 + ) { + edges { + cursor + node { + id + tags { + name + value + } + block { height } + bundledIn {id} + } + } + } +} +``` + +### あいまい検索 + +あいまい検索は非常に強力で、多くのバリエーションを持つ「類似」テキストを検索できます。 + +「cat」または「dog」(またはCAT、doG、cAts、CAAtsなど)を持つすべてのトランザクションを検索します。タグには少なくともcatに似たまたはdogに似た用語が含まれている可能性があります。 + +```graphql:no-line-numbers +{ + transactions( + tags: [ + { name: "Content-Type", values: ["cat", "dog"], match: "FUZZY_OR"} + ] + first: 10 + ) { + edges { + cursor + node { + id + tags { + name + value + } + block { height } + bundledIn {id} + } + } + } +} +``` + +catに似たおよびdogに似たタグ値を持つトランザクションを検索します +```graphql:no-line-numbers +{ + transactions( + tags: [ + { name: "Content-Type", values: ["cat", "dog"], match: "FUZZY_AND"} + ] + first: 10 + ) { + edges { + cursor + node { + id + tags { + name + value + } + block { height } + bundledIn {id} + } + } + } +} +``` + +### Exclude Bundled (L2) Transactions + +Simply set `bundledIn: NULL` + +```graphql:no-line-numbers +query just_l1 { + transactions( + first: 10, + bundledIn: null + ) + { + edges { + node { + id + signature + owner { + address + } + block { + height + } + } + } + } +} +``` + + +### クエリに基づく総カウントを取得する + +特定のフィルタセットに合致するトランザクションがいくつあるかを理解したい場合は、`count`フィールドを使用します。これにより、追加の最適化されたカウント操作がトリガーされます。クエリを返すのにかかる時間がほぼ倍増するため、必要なときだけ使用してください。 + +```graphql:no-line-numbers +query count_mirror { + { + transactions(tags:{values:["MirrorXYZ"]}) + { + count + } + } +} +``` diff --git a/docs/src/ja/guides/smartweave/atomic-assets/akord.md b/docs/src/ja/guides/smartweave/atomic-assets/akord.md new file mode 100644 index 0000000..5c809b3 --- /dev/null +++ b/docs/src/ja/guides/smartweave/atomic-assets/akord.md @@ -0,0 +1,95 @@ +--- +locale: ja +--- +# Akordを使ってアトミックアセットをミントする + +Akordは、[アトミックアセット標準](https://atomic-assets.arweave.dev/)に準拠したアトミックNFTの作成を可能にします。 + +アトミックアセットは、[ユニバーサルデータライセンス](https://arwiki.wiki/#/en/Universal-Data-License-How-to-use-it) (UDL) を添付するオプションでミントされ、[ユニバーサルコンテンツマーケットプレイス](https://docs.akord.com/nfts/minting-atomic-nfts/universal-content-marketplace) (UCM) にリストすることができます。 + +## AkordJSを使って + +[AkordJS](https://github.com/Akord-com/akord-js)パッケージを使用してアトミックアセットをミントできます。 + +### 始める前に + +> Requires NodeJS - https://nodejs.org + + + + +```console +npm install @akord/akord-js +``` + + + + +```console +yarn add @akord/akord-js +``` + + + + +### NFTメタデータの定義 +NFTのために以下のフィールドを定義できます。 +| 名前 | 説明 | オプション | +| ---- | ----------- | -------- | +| owner | アセットの所有者のアドレス | false | +| name | アセットの名前 (最大150文字) | false | +| description | アセットの説明 (最大300文字) | false | +| types | アセットの種類、例: "image", "video" | false | +| topics | アセットに関連するトピックやカテゴリー、例: "nature", "music" | true | +| creator | アセットの作成者のアドレス。提供されない場合、所有者がデフォルトになります | true | +| thumbnail | アセットに関連付けられたサムネイル画像 | true | +| contractTxId | コントラクトソーストランザクションID。提供されない場合、デフォルトは "Of9pi--Gj7hCTawhgxOwbuWnFI1h24TTgO5pw8ENJNQ" | true | +| ticker | トークンのシンボル。提供されない場合、デフォルトは "ATOMIC" | true | + + +### ミントフローの例 + + +```js +import { Akord, Auth } from '@akord/akord-js' + +// First, let's initialize Akord instance +// In order to mint Atomic NFTs with AkordJS, you first need an Akord account. +// Sign up for Akord here: https://v2.akord.com/signup +const { wallet } = await Auth.signIn(email, password); +const akord = await Akord.init(wallet); + +// Now, let's define our NFT metadata +const metadata = { + name: "Golden Orchid - Flora Fantasy #1", + owner: "zpCttRSE4zoDmmqu37PwGkwoMI89JsoY9mZx4IfzVb8", + creator: "oB8a20xgJy9ytEPkrFeIkQ9_6nWuoaNbsQYtaCVkNIY", + description: "A rare digital representation of the mythical Golden Orchid", + types: ["image"], + topics: ["floral", "nature"] +}; + +// Let's create a public vault to contain our NFTs +const { vaultId } = await akord.vault.create("My NFTs", { public: true }); + +// Finally, let's mint the NFT by passing the path to the asset data, NFT metadata +const { uri } = await akord.nft.mint(vaultId, "./my-nft.jpeg", metadata); +``` +### おめでとうございます! + +トランザクションがArweaveネットワークで受け入れられると(平均で5〜15分かかります)、 \ +それは自動的に[Warp](https://sonar.warp.cc/)に登録され、次のURLを訪れることでNFTにアクセスできます: +https://viewblock.io/arweave/tx/{uri} + +## Akordウェブアプリを使用して + +また、ウェブアプリケーション内からアトミックアセットの作成を段階的に説明する完全なユーザーフレンドリーガイドを見つけることができます。 \ +[ミントガイドはこちら](https://docs.akord.com/nfts/minting-atomic-nfts) \ +そして、最良の部分は、コーディングが不要であることです! + +## まとめ + +このガイドでは、AkordJSを使って単一のNFTをミントする方法を示しましたが、SDKはここで終わりません。 \ +さらに深く掘り下げるには、次のAkordJSモジュールをチェックしてください: +- [NFT](https://github.com/Akord-com/akord-js?tab=readme-ov-file#nft) - UDLを添付してNFTをミントし、UCMにリストする方法を学ぶ +- [コレクション](https://github.com/Akord-com/akord-js?tab=readme-ov-file#collection) - アトミックNFTのコレクションをミントする方法を学ぶ diff --git a/docs/src/ja/guides/smartweave/atomic-assets/ardrive-cli.md b/docs/src/ja/guides/smartweave/atomic-assets/ardrive-cli.md new file mode 100644 index 0000000..2db6ee3 --- /dev/null +++ b/docs/src/ja/guides/smartweave/atomic-assets/ardrive-cli.md @@ -0,0 +1,103 @@ +--- +locale: ja +--- +# ArDrive CLIを使用してアトミックアセットをデプロイおよび登録する + +アトミックアセットは、Permawebで取引可能にするために登録する必要があります。`ardrive-cli`のようなサービスを使用してアセットをアップロードし、適切なデータタグを付与した後、このCLIを使用してアセットを登録できます。 + +## ArDrive-cliと`asset-register` CLIを使用してアトミックアセットを公開するためのガイド + +### セットアップ + + + +> Requires NodeJS - https://nodejs.org and jq - https://jqlang.github.io/jq/download/ + +``` +npm i -g ardrive-cli +npm i -g asset-registar +``` + +### アトミックアセットタグの作成 + +テキストエディタを使用して、新しいファイル`data.json`を作成し、この新しいファイルに以下を追加します。 + +```json +{ + "dataGqlTags": { + "Type": "ASSET_TYPE_HERE", + "Title": "TITLE_HERE", + "Description": "DESCRIPTION_HERE", + "License": "yRj4a5KMctX_uOmKWCFJIjmY8DeJcusVk6-HzLiM_t8", + "App-Name": "SmartWeaveContract", + "App-Version": "0.3.0", + "Contract-Src": "Of9pi--Gj7hCTawhgxOwbuWnFI1h24TTgO5pw8ENJNQ", + "Indexed-By": "ucm", + "Init-State": "{ \"ticker\": \"ATOMIC\", \"name\": \"ASSET_NAME_HERE\", \"balances\": { \"YOUR_WALLET_ADDRESS\": UNITS_HERE }, \"claimable\": [] }" + } +} +``` + +タグが初期化されたら、すべての大文字の単語を、アセットに固有の値に置き換える必要があります。 + +ASSET_TYPE_HERE: + +これはアセットの一語の説明で、「image」、「audio」、「video」などです。 + +TITLE_HERE: + +アセットを説明するタイトルで、150文字を超えてはいけません。 + +DESCRIPTION_HERE: + +検索結果やアセットのリスト結果に表示したい説明です。 + +ASSET_NAME_HERE: + +アセットの名前で、一単語またはダッシュでつなげて書きます(例:"AA-ALIEN-WITH-BEER")。 + +YOUR_WALLET_ADDRESS: + +所有権を与えたいウォレットアドレスです。 + +UNITS_HERE: + +このアセットに対して提供したい部分単位の数で、唯一の所有者であれば1に、100人の所有者を望む場合は100に置き換えます。 + +ファイルを`data.json`として保存します。 + +### 公開するアセットをこのディレクトリにコピーします。 +--- + +### 新しいArweaveウォレットを使ったアップロード + +ウォレットを作成するか、ここにwallet.jsonをコピーしてください。 +```sh +ardrive generate-seedphrase +# copy the seed phrase that is in the output and include in the next command where the `...` are. +# generate wallet +ardrive generate-wallet -s "..." > wallet.json +``` + +Using `ardrive-cli` we are going to create a drive and a folder. + +```sh +# create drive and folder +export FOLDER=$(ardrive create-drive -w ./wallet.json -n "My Atomic Assets" --turbo | jq -r '.created[] | select(.type == "folder").entityId') +# upload atomic asset +export ASSET=$(ardrive upload-file -w ./wallet.json -F ${FOLDER} --metadata-file ./data.json -l ASSET_FILE_HERE --turbo | jq -r '.created[] | select(.type == "file").dataTxId') +``` + +> NOTE: if your file is larger than 500k, you will need to add credits to your ardrive wallet, you can do this by going to https://ardrive.io and logging in with your wallet file. + + +### アセットの登録 + +アセットがアトミックアセットタグでアップロードされたら、`asset-register `と呼び出すだけです。 + +```sh +asset-registar ${ASSET} +``` +### おめでとうございます! + +検索バーにcontractIdを入力することで、ar://bazarでアセットを見つけることができるはずです。 diff --git a/docs/src/ja/guides/smartweave/atomic-assets/index.md b/docs/src/ja/guides/smartweave/atomic-assets/index.md new file mode 100644 index 0000000..6741d6e --- /dev/null +++ b/docs/src/ja/guides/smartweave/atomic-assets/index.md @@ -0,0 +1,15 @@ +--- +locale: ja +--- +# Atomic Assets + +アトミックアセットは、データ、ラベル(タグとも呼ばれる)、および特定の合意を含むユニークなパッケージであり、すべてが単一の変更不可能な識別子の下にあります。これにより、アプリケーションやユーザーは、この識別子を使用してデータ、ラベル、および合意にアクセスできます。 + +アトミックアセットの取引を可能にするためには、スマートウィーブトークンというものに接続する必要があります。この接続により、アセットはアトミックトークンと呼ばれるものに変わり、交換または取引できるようになります。 + +スマートウィーブトークンには、特定のアセットに関連するトークンの所有者を追跡するための特別な機能であるバランスオブジェクトがあります。これにより、所有権と取引が正確に記録および管理されることが保証されます。 + +## アトミックアセットのデプロイ + +* [Akordを使用する](akord.md) +* [ArDrive CLIを使用する](ardrive-cli) \ No newline at end of file diff --git a/docs/src/ja/guides/smartweave/warp/deploying-contracts.md b/docs/src/ja/guides/smartweave/warp/deploying-contracts.md new file mode 100644 index 0000000..a19c807 --- /dev/null +++ b/docs/src/ja/guides/smartweave/warp/deploying-contracts.md @@ -0,0 +1,139 @@ +--- +locale: ja +--- +# Warp (SmartWeave) SDK - Deploying Contracts + +> **⚠️ Deprecation Notice** +> +> この文書は廃止予定であり、古い情報が含まれている可能性があります。 + +SmartWeaveコントラクトは、ネットワークに対して2つのトランザクションを投稿することで作成されます。1つはソーストランザクション、もう1つは初期状態トランザクションです。ソーストランザクションには、コントラクトが現在の状態を決定するために使用するソースコードが含まれています。初期状態トランザクションは、参照するためのコントラクト識別子と、コントラクトが現在の状態を評価するための出発点として使用すべき初期シードデータを提供します。現在の状態は、ネットワークに書き込まれたアクション(入力パラメータを実行するために評価されたソースコードを使用するトランザクション)にアクセスすることによって計算されます。Warpコントラクトは多くの異なる言語で作成でき、Warp SDKを使用して評価できます。このガイドでは、Warpコントラクトをデプロイするさまざまな方法を示します。 + +::: tip +Warp SmartWeaveコントラクトの作成について詳しく学ぶには、Warpアカデミーをチェックしてください! [https://academy.warp.cc/](https://academy.warp.cc/) +::: + +Warpバージョン1.3.0以降、コントラクトをWarpでデプロイするためにはプラグインが必要です。このプラグインを使用すると、さまざまなウォレット署名を追加できます。 + +```js +import { DeployPlugin, InjectedArweaveSigner } from 'warp-contracts-plugin-deploy' +import { WarpFactory } from 'warp-contracts' + +const warp = WarpFactory.forMainnet().use(new DeployPlugin()) + +... + +function deploy(initState, src) { + if (window.arweaveWallet) { + await window.arweaveWallet.connect(['ACCESS_ADDRESS', 'SIGN_TRANSACTION', 'ACCESS_PUBLIC_KEY', 'SIGNATURE']); + } + const userSigner = new InjectedArweaveSigner(window.arweaveWallet); + await userSigner.setPublicKey(); + + return warp.deploy({ + wallet: userSigner, + src, + initState: JSON.stringify(initState) + }) +} +``` + +## Warp SmartWeaveコントラクトをデプロイする4つの方法 + +Warp SDKを介してSmartWeaveコントラクトをデプロイする方法は4つあります。これらのオプションは、開発者が直面するさまざまなユースケースを処理します。 + +- ソースを同時にデプロイする必要がある +- すでにpermawebにソースがあるコントラクトをデプロイする必要がある +- シーケンサーを介してコントラクトをデプロイし、パスマニフェストを使用してデータを指し示す必要がある +- Irysを介してコントラクトをデプロイし、そのコントラクトをシーケンサーに登録する必要がある + +::: tip +Warpのデプロイメントに関する詳細は、プロジェクトのGitHubのREADMEをチェックしてください。 [https://github.com/warp-contracts/warp#deployment](https://github.com/warp-contracts/warp#deployment) +::: + +::: warning +このプロジェクトは急速に開発が進んでいるため、ここにある文書はすぐに古くなる可能性があります。古いことに気づいた場合は、[Permaweb Cookbook Discord Channel](https://discord.gg/haCAX3shxF)でお知らせください。 +::: + +## 例 + +::: tip +デフォルトでは、すべてのデプロイ関数はIrysを介してArweaveに公開されます。各オプションには、Irysを使用しないように設定できるフラグがありますが、ネットワークがトランザクションを完全に確認するまでに多くの確認が必要です。 +::: + +**deploy** + +コントラクトとソースコードをWarpシーケンサーにデプロイし、Irys(L2)およびArweaveにデプロイします。 + +```ts +const { contractTxId, srcTxId } = await warp.deploy({ + wallet, + initState, + data: { "Content-Type": "text/html", body: "

Hello World

" }, + src: contractSrc, + tags: [{ name: "AppName", value: "HelloWorld" }], +}); +``` + +- wallet - should be Arweave keyfile (wallet.json) parsed as a JSON object implementing the [JWK Interface](https://rfc-editor.org/rfc/rfc7517) or the string 'use_wallet' +- initState - is a stringified JSON object +- data - is optional if you want to write data as part of your deployment +- src - is the string or Uint8Array value of the source code for the contract +- tags - is an array of name/value objects `{name: string, value: string}[]`, [Learn more about tags](../../../concepts/tags.md) + + +**deployFromSourceTx** + +すでにpermawebにソースがありますか?その場合、deployFromSourceTxがあなたの選択肢です!permawebでは、データが変更される心配がないため、コントラクトのソースコードを再利用するのは簡単です。 + +```ts +const { contractTxId, srcTxId } = await warp.deployFromSourceTx({ + wallet, + initState, + srcTxId: "SRC_TX_ID", +}); +``` + +**deployBundled** + +Warpゲートウェイシーケンサーのエンドポイントを使用して、生データアイテムをIrysにアップロードし、インデックス化します。 + +```ts +import { createData } from "arbundles"; + +const dataItem = createData( + JSON.stringify({ + manifest: "arweave/paths", + version: "0.1.0", + index: { + path: "index.html", + }, + paths: { + "index.html": { + id: "cG7Hdi_iTQPoEYgQJFqJ8NMpN4KoZ-vH_j7pG4iP7NI", + }, + }, + }), + { tags: [{ "Content-Type": "application/x.arweave-manifest+json" }] }, +); +const { contractTxId } = await warp.deployBundled(dataItem.getRaw()); +``` + + +**register** + +Warpゲートウェイシーケンサーのエンドポイントを使用して、Irysでアップロードされたコントラクトをインデックス化します。 + +```ts +import Irys from '@irys/sdk' + +const irys = new Irys({ 'https://node2.irys.xyz', 'arweave', wallet }) +const { id } = await irys.upload('Some Awesome Atomic Asset', { + tags: [{'Content-Type': 'text/plain' }] +}) +const { contractTxId } = await warp.register(id, 'node2') +``` + +## まとめ + +なぜこれほど多くのコントラクトをデプロイするオプションがあるのでしょうか?これらのメソッドは重複を減らし、高度なコントラクトインタラクションを可能にし、スマートウィーブプロトコルのテストや使用の柔軟性を提供するために存在します。permawebは非常にユニークなアーキテクチャを持っており、デジタルデータとそのデータを管理するためのコントラクトの両方を同じトランザクション識別子でデプロイする機能を提供します。その結果、動的データと不変のデータセットがペアになります。コントラクトをデプロイすることはWarp SDKの一部に過ぎず、詳細を学ぶにはこのガイドを読み続けてください! \ No newline at end of file diff --git a/docs/src/ja/guides/smartweave/warp/evolve.md b/docs/src/ja/guides/smartweave/warp/evolve.md new file mode 100644 index 0000000..550dc72 --- /dev/null +++ b/docs/src/ja/guides/smartweave/warp/evolve.md @@ -0,0 +1,89 @@ +--- +locale: ja +--- +# Warp (SmartWeave) SDK - Evolve + +> **⚠️ Deprecation Notice** +> +> この文書は廃止予定であり、古い情報が含まれている可能性があります。 + +Evolveは、開発者が新しいコントラクトをデプロイすることなくスマートコントラクトのソースコードを更新できる機能です。この機能を使用するには、まず新しいソースコードをsave関数を使って送信する必要があります。更新されたコードがPermaweb上で確認されたら、evolve関数を使用してコントラクトを新しいソースコードIDにポイントします。これにより、新しいコントラクトインスタンスを作成することなく、コントラクトの動作を更新できます。 + +## なぜ? + +SmartWeaveコントラクトを書くのは難しく、時間の経過とともに更新や新機能を追加する必要がある場合があります。Evolveを使用することで、新しいコントラクトインスタンスをゼロから作成することなく、コントラクトに変更を加えることができます。この機能を使用するには、コントラクトの状態オブジェクトに新しいコントラクトソーストランザクション識別子を設定したevolveプロパティを含める必要があります。これにより、ゼロから始めることなく既存のコントラクトを修正および改善できます。 + + +```json +{ + ... + "evolve": "YOUR SOURCE CODE TX_ID" +} +``` + +## 新しいソースをPermawebに投稿する + +既存のコントラクトを進化させる前に、新しいソースコードをPermawebに投稿する必要があります。これを`save`関数を使って行います。 +```ts +import { WarpFactory } from 'warp-contracts' +import fs from 'fs' + +const src = fs.readFileSync('./dist/contract.js', 'utf-8') +const jwk = JSON.parse(fs.readFileSync('./wallet.json', 'utf-8')) +const TX_ID = 'VFr3Bk-uM-motpNNkkFg4lNW1BMmSfzqsVO551Ho4hA' +const warp = WarpFactory.forMainnet() + +async function main() { + const newSrcTxId = await warp.contract(TX_ID).connect(jwk).save({src }) + console.log('NEW SRC ID', newSrcTxId) +} + +main() +``` + +## コントラクトを進化させる + +::: warning +**確認**してください:新しいSource TX_IDが確認されていることを、[Sonar](https://sonar.warp.cc)でTX_IDが確認されていることを確認してください。 +::: + +```ts +import { WarpFactory } from 'warp-contracts' +import fs from 'fs' + +const src = fs.readFileSync('./dist/contract.js', 'utf-8') +const jwk = JSON.parse(fs.readFileSync('./wallet.json', 'utf-8')) +const TX_ID = 'VFr3Bk-uM-motpNNkkFg4lNW1BMmSfzqsVO551Ho4hA' +const warp = WarpFactory.forMainnet() + +async function main() { + const newSrcTxId = await warp.contract(TX_ID).connect(jwk).evolve('SRC TX ID') + console.log(result) +} + +main() + +``` + +::: tip +進化機能は、将来のアクションにのみ適用されることに注意してください。つまり、コントラクトが進化する前に発生したアクションに新しいソースコードを適用することはできません。 +::: + +## まとめ + +Evolveは強力な機能であり、コントラクトの拡張性を提供しますが、**攻撃**ベクトルにもなり得るため、使用する際には自分が何をしているのかを十分に理解していることを確認してください。以下は、コントラクト内でのevolve関数の一般的なスニペットの例です。 + +```js + +export async function handle(state, action) { + ... + if (action.input.function === 'evolve') { + if (action.caller === state.creator) { + state.evolve = action.input.value + } + return { state } + } + ... +} +``` + diff --git a/docs/src/ja/guides/smartweave/warp/intro.md b/docs/src/ja/guides/smartweave/warp/intro.md new file mode 100644 index 0000000..7232d30 --- /dev/null +++ b/docs/src/ja/guides/smartweave/warp/intro.md @@ -0,0 +1,116 @@ +--- +locale: ja +--- +# Warp (SmartWeave) SDK Intro + +> **⚠️ Deprecation Notice** +> +> この文書は廃止予定であり、古い情報が含まれている可能性があります。 + +Warpは人気のあるSmartWeaveプロトコルSDKです。WarpとIrysを使用すると、SmartWeaveのデプロイやインタラクションを非常に高速に行うことができます。 + +## はじめに + +このガイドはWarp SDKとそのAPIメソッドの簡単な紹介です。SmartWeaveコントラクトの一般的な情報については、[Core Concepts: SmartWeave](/concepts/smartweave.html)をご覧ください。 + +::: tip +Warp SDKは[github](https://github.com/warp-contracts)で見つけることができます。Warp SmartWeaveについてさらに詳しく知りたい場合は、[Warp Website](https://warp.cc)をご覧ください。 +::: + +SDKをサーバーで使用するには、wallet.jsonファイルへのアクセスが必要です。ブラウザでSDKを使用するには、Arweaveサポートのウォレットに接続する必要があります。 + +## インストール + +プロジェクトにwarpをインストールするには、`npm`、`yarn`、または他のnpmクライアントを使用できます。 + + + + +```console +npm install warp-contracts +``` + + + + +```console +yarn add warp-contracts +``` + + + + +## インポート + +Warpをプロジェクトで使用する場合、プロジェクトのセットアップに応じてSDKをインポートする方法がいくつかあります。 + + + + +```ts +import { WarpFactory } from "warp-contracts"; +``` + + + + +```js +import { WarpFactory } from "warp-contracts/mjs"; +``` + + + + +```js +const { WarpFactory } = require("warp-contracts"); +``` + + + + +## 環境への接続 + +インタラクションを行いたい環境はいくつかあります。これらの環境には`forXXXX`ヘルパーを使用して接続できます。 + + + + +```ts +const warp = WarpFactory.forMainnet(); +``` + + + + +```js +const warp = WarpFactory.forTestnet(); +``` + + + + +```js +const warp = WarpFactory.forLocal(); +``` + + + + +```js +const warp = WarpFactory.custom( + arweave, // arweave-js + cacheOptions, // { ...defaultCacheOptions, inMemory: true} + environment, // 'local', 'testnet', 'mainnet' +); +``` + + + + +::: warning +ローカル環境を使用する場合は、ポート1984でarLocalを実行している必要があります。 +::: + +## まとめ + +このイントロガイドはWarpの設定を手助けするためのものであり、次のガイドではWarp SDKを使用してSmartWeaveコントラクトをデプロイし、それらのコントラクトとインタラクトし、最終的にはSmartWeaveコントラクトを進化させる方法を示します。 diff --git a/docs/src/ja/guides/smartweave/warp/readstate.md b/docs/src/ja/guides/smartweave/warp/readstate.md new file mode 100644 index 0000000..aab8db3 --- /dev/null +++ b/docs/src/ja/guides/smartweave/warp/readstate.md @@ -0,0 +1,63 @@ +--- +locale: ja +--- +# Warp (SmartWeave) SDK - ReadState + +> **⚠️ Deprecation Notice** +> +> この文書は廃止予定であり、古い情報が含まれている可能性があります。 + +SmartWeaveコントラクトの状態は、遅延評価を通じて計算されます。つまり、状態の評価は書き込みではなく読み取りで行われます。コントラクトを読み取る際、SDKはすべての状態インタラクションを収集し、ソートして、reduceまたはfoldパターンを使用してソースコントラクトに対して実行します。 + +## 基本的なReadstate + +```ts +const warp = WarpFactory.forMainnet() +const CONTRACT_ID = '_z0ch80z_daDUFqC9jHjfOL8nekJcok4ZRkE_UesYsk' + +const result = await warp.contract(CONTRACT_ID).readState() + +// log current state +console.log(result.cachedValue.state) +``` + + +## 高度なReadstate + +一部のコントラクトは、他のコントラクトの状態を読み取ったり、他のコントラクトに対して呼び出しや書き込みを行ったりします。これらのコントラクトの状態を要求する際には、評価オプションを設定する必要があります。 + +```ts +const warp = WarpFactory.forMainnet() +const CONTRACT_ID = 'FMRHYgSijiUNBrFy-XqyNNXenHsCV0ThR4lGAPO4chA' + +const result = await warp.contract(CONTRACT_ID) + .setEvaluationOptions({ + internalWrites: true, + allowBigInt: true + }) + .readState() + +// log current state +console.log(result.cachedValue.state) +``` + +### 一般的な評価オプション + +| 名前 | 説明 | +| ---- | ----------- | +| internalWrites | 他のコントラクトへの内部書き込みを含むコントラクトを評価します | +| allowBigInt | BigIntプリミティブを使用するコントラクトを評価します。BigIntについての詳細は[MDN Docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt)を参照してください。 | +| unsafeClient | この値は `allow`、`skip`、または `throw` です。unsafeClientをコントラクトで使用することは避けるべきで、非決定的な結果を招く可能性があります。 | + +## 特定のBlockHeightまたはSortkeyからのReadstate + +現在の状態ではなく、以前の状態を確認したい場合、blockHeightを指定することで特定のブロック高でのコントラクトの状態を読み取ることができます。 + + +```ts +const { sortKey, cachedValue } = await contract.readState(1090111) +``` + +## まとめ + +SmartWeaveコントラクトの現在の状態を読み取ることは、すべてのインタラクションを引き出し、それぞれのインタラクションをfoldメソッドを通じて処理することによって状態評価を行います。このアプローチはpermaweb特有のものであり、SmartWeaveコントラクトコードがどのように実行されるかを理解するために特有の理解が必要です。 diff --git a/docs/src/ja/guides/smartweave/warp/write-interactions.md b/docs/src/ja/guides/smartweave/warp/write-interactions.md new file mode 100644 index 0000000..983d672 --- /dev/null +++ b/docs/src/ja/guides/smartweave/warp/write-interactions.md @@ -0,0 +1,83 @@ +--- +locale: ja +--- +# Warp WriteInteractions + +> **⚠️ Deprecation Notice** +> +> この文書は廃止予定であり、古い情報が含まれている可能性があります。 + +SmartWeaveコントラクト上の関数を呼び出すには、SmartWeaveアクションとして知られるトランザクションを作成します。このアクションには、関数名とSmartWeaveコントラクトの関数に必要な入力パラメータが含まれます。コントラクトのwriteInteraction関数を使用してSmartWeaveアクションを作成できます。 + +## コード + +```ts +import { WarpFactory } from 'warp-contracts' + +const warp = WarpFactory.forMainnet() +const STAMP_PROTOCOL = 'FMRHYgSijiUNBrFy-XqyNNXenHsCV0ThR4lGAPO4chA' + +async function doStamp() { + const result = await warp.contract(STAMP_PROTOCOL) + .connect('use_wallet') + .writeInteraction({ + function: 'stamp', + timestamp: Date.now(), + transactionId: 'zQhANphTO0DOsaWXhExylUD5cBN3a6xWvfn5ZCpmCVY' + }) + console.log(result) +} +``` + +writeInteractionを呼び出す際には、コントラクトが受け取ることを期待している入力パラメータを渡す必要があります。 + +::: warning +SmartWeaveコントラクトは遅延フローで評価されるため、あなたのインタラクションが成功したかどうかは、コントラクトを現在の状態に評価するまで分かりません。[Warp readState](./readstate.md)を使用してコントラクトにアクセスし、インタラクションが成功したかどうかを確認してください。 +::: + +## ドライ書き込み + +`DryWrite`は、実際にpermaweb上で実行せずに、現在の状態でインタラクションをテストして検証できる機能です。この機能を使用すると、ローカルでインタラクションをシミュレートし、それが成功するかどうかを確認してから適用できます。 + + +```ts +import { WarpFactory } from 'warp-contracts' + +const warp = WarpFactory.forMainnet() +const STAMP_PROTOCOL = 'FMRHYgSijiUNBrFy-XqyNNXenHsCV0ThR4lGAPO4chA' + +async function doStamp() { + const result = await warp.contract(STAMP_PROTOCOL) + .connect('use_wallet') + .dryWrite({ + function: 'stamp', + timestamp: Date.now(), + transactionId: 'zQhANphTO0DOsaWXhExylUD5cBN3a6xWvfn5ZCpmCVY' + }) + console.log(result) +} +``` + +::: warning +ドライ書き込みを使用する際の注意点として、readStateやinternalWritesを使用するコントラクトの場合、全体の状態をローカルで評価する必要があります。これにより、処理が遅くなる可能性があります。 +::: + +## スピード最適化 + +デフォルトでは、writeInteractionsはWarp Sequencerに送信され、バンドルされてArweaveに投稿されます。バンドルを無効にすることで、直接Arweaveに投稿することも可能です。 + +```ts +const result = await contract.writeInteraction({ + function: 'NAME_OF_YOUR_FUNCTION', + ... +}, { disableBundling: true }) +``` + +## まとめ + +SmartWeaveプロトコルは、immutableでappend-onlyのストレージシステム上の動的データを変更することを可能にし、writeInteractionsを使用してSmartWeaveコントラクトとの信頼のない、許可のないコミュニケーションを可能にします。Warp SDKは、SmartWeaveプロトコルとそのwriteInteractions機能とのインタラクションのためのユーザーフレンドリーなAPIを提供します。 + +追加リソース: + +* Warp SDK [https://github.com/warp-contracts/warp](https://github.com/warp-contracts/warp) +* Warp Docs [https://warp.cc](https://warp.cc) \ No newline at end of file diff --git a/docs/src/ja/guides/testing/arlocal.md b/docs/src/ja/guides/testing/arlocal.md new file mode 100644 index 0000000..e54fc26 --- /dev/null +++ b/docs/src/ja/guides/testing/arlocal.md @@ -0,0 +1,105 @@ +--- +locale: ja +--- +# arlocal + +`arlocal`は、ローカルのArweaveテスト環境を迅速にセットアップし、実行するためのツールです。これにより、Arweaveゲートウェイのようなサーバー上でトランザクションをテストすることができます。開発者は、アプリケーションをArweaveネットワークにデプロイする前に、シミュレーションされた環境でテストすることができます。 + +$ARトークンは必要なく、トランザクションは即時です。 + +## CLI + +`arlocal` CLIを使用するには、マシンにNodeとnpmをインストールしておく必要があります。 + +ローカルゲートウェイを起動するには、次のコマンドを実行します: +::: tip +スリムゲートウェイを実行するポートを指定するには、引数としてポートを渡します。 +`npx arlocal 8080` +::: + +ログを隠すには、ゲートウェイを実行するときに`--hidelogs`フラグを追加します。 +`npx arlocal --hidelogs` +## Node +パッケージを開発依存関係としてインストールするには、次のコマンドを実行します: +`yarn add arlocal -D` or `npm install arlocal --save-dev` + +```js +import ArLocal from 'arlocal'; + +(async () => { + const arLocal = new ArLocal(); + + // create local testing environment + await arLocal.start(); + + // your tests here + + // shut down testing environment + await arLocal.stop(); +})(); +``` + +`ArLocal`インスタンスは、以下のオプションを指定して作成できます: + +| オプション | 説明 | +|-------------|--------------------------------| +| port | 使用するポート | +| showLogs | ログを表示するかどうか | +| dbPath | 一時データベース用のディレクトリ| +| persist | サーバーの再起動間でデータを永続化 | + +### 例 + +この例を動作させるには、生成されたテストウォレットを使用する必要があります。これを実現するためには、`arweave`パッケージをプロジェクトにインストールする必要があります。 +`arweave` package must be installed to the project along with `arlocal` + +`yarn add arweave arlocal -D` or `npm install --save-dev arweave arlocal` + +以下は、データトランザクションを作成し、arlocalを使用してArweaveに投稿するための基本的なJavaScriptテストです: + +```js +import ArLocal from 'arlocal' +import Arweave from 'arweave' + +test('test transaction', async () => { + // create and start ArLocal instance + const arLocal = new ArLocal() + await arLocal.start() + // create local Arweave gateway + const arweave = Arweave.init({ + host: 'localhost', + port: 1984, + protocol: 'http' + }) + // generate wallet + const wallet = await arweave.wallets.generate() + // airdrop amount of tokens (in winston) to wallet + await arweave.api.get(`mint/${addr}/10000000000000000`) + // create mine function + const mine = () => arweave.api.get('mine') + try { + // create transaction + let transaction = await arweave.createTransaction({ + data: 'Hello world!' + }, wallet); + // sign and post transaction + await arweave.transactions.sign(transaction, wallet); + const response = await arweave.transactions.post(transaction); + // mine transaction + await mine() + // test the response + } catch(err) { + console.error('ERROR: ', err.message) + } + // tear down testing environment + await arLocal.stop() +}) +``` + + +::: warning +L1トランザクションのテスト結果は、L2トランザクションと異なる場合があります。 +::: + +## リソース +[arlocalドキュメント](https://github.com/textury/arlocal) diff --git a/docs/src/ja/guides/using-vue.md b/docs/src/ja/guides/using-vue.md new file mode 100755 index 0000000..a8beaaa --- /dev/null +++ b/docs/src/ja/guides/using-vue.md @@ -0,0 +1,12 @@ +--- +locale: ja +--- +# VueをMarkdownで使用する + +## ブラウザAPIアクセス制限 + +VuePressアプリケーションは、静的ビルドを生成する際にNode.jsでサーバー側レンダリングされるため、Vueの使用は[ユニバーサルコード要件](https://ssr.vuejs.org/en/universal.html)に準拠する必要があります。簡単に言うと、Browser / DOM APIには`beforeMount`または`mounted`フック内でのみアクセスするようにしてください。 + +SSRに適していないコンポーネント(カスタムディレクティブを含むなど)を使用したりデモしたりする場合は、それらを組み込みの``コンポーネントでラップすることができます: + +## \ No newline at end of file diff --git a/docs/src/ja/guides/vouch.md b/docs/src/ja/guides/vouch.md new file mode 100644 index 0000000..f467d8e --- /dev/null +++ b/docs/src/ja/guides/vouch.md @@ -0,0 +1,94 @@ +--- +locale: ja +--- +# Vouch + +There are a few ways to query an Arweave address to verify if it has been vouched by a service. Below is two of those approaches. +## VouchDAO Package +The `isVouched` function is made available to use in your applications in a straight-forward way. + +#### Installation +Add the package: + + + +```console:no-line-numbers +npm i vouchdao +``` + + + + +```console:no-line-numbers +yarn add vouchdao +``` + + + + +#### Usage +Inside of an async function you can use the `isVouched` function which will return true if a user is vouched. + +```js:no-line-numbers +import { isVouched } from 'vouchdao' +(async () => { + const res = await isVouched("ARWEAVE_ADDRESS") // true || undefined + // ... +})(); +``` + +## Using GraphQL +You can query the Arweave network using GraphQL to find out if a given Arweave address has been vouched. + +```graphql +query { + transactions( + tags:{name:"Vouch-For", values:["ARWEAVE_ADDRESS"]} + ) { + edges { + node { + id + tags { + name + value + } + } + } + } +} +``` + +If the address has been vouched, an array of nodes will be returned with tags pertaining to the service that issues the ANS-109. You can cross reference the `owner address` value with the passed community votes to ensure the service has been verified through community vote via VouchDAO. + +```graphql +"owner": { + "address": "Ax_uXyLQBPZSQ15movzv9-O1mDo30khslqN64qD27Z8" +}, +"tags": [ + { + "name": "Content-Type", + "value": "application/json" + }, + { + "name": "App-Name", + "value": "Vouch" + }, + { + "name": "App-Version", + "value": "0.1" + }, + { + "name": "Verification-Method", + "value": "Twitter" + }, + { + "name": "Vouch-For", + "value": "ARWEAVE_ADDRESS" + } +] +``` + +## Resources +* [VouchDAO](https://vouch-dao.arweave.dev) +* [VouchDAO Contract](https://sonar.warp.cc/?#/app/contract/_z0ch80z_daDUFqC9jHjfOL8nekJcok4ZRkE_UesYsk) +* [Arweave/GraphQL Playground](https://arweave.net/graphql) \ No newline at end of file diff --git a/docs/src/ja/index.md b/docs/src/ja/index.md new file mode 100644 index 0000000..38cf3af --- /dev/null +++ b/docs/src/ja/index.md @@ -0,0 +1,39 @@ +--- +locale: ja +onboarding: true +--- + +# パーマウェブクックブック + +パーマウェブクックブック は、パーマウェブ上でアプリケーションを構築するための基本的な概念と参考資料を提供する開発者向けリソースです。各概念と参考資料は、パーマウェブ開発エコシステムの特定の側面に焦点を当て、追加の詳細と使用例を提供します。 + +## 開発者の皆様へ + +アーウィーブ開発コミュニティへようこそ。ここでは過去がブロックチェーンに永遠に刻まれ、未来は無限の可能性に満ちています。分散型ウェブを一緒に構築しましょう! + +[詳しく読む](getting-started/welcome.md) + +## 貢献 + +クックブックは、新しいパーマウェブ開発者が簡単に貢献できるように設計されています。何かをする方法がわからなくても、クックブックに貢献することは学ぶ素晴らしい方法です! + +ここで全てのオープンな問題を確認できます。貢献ガイドラインはこちらです。クックブックに概念、ガイド、またはリファレンスが欠けていると感じたら、問題を追加してください。 + +[詳しく読む](getting-started/contributing.md) + +## クックブックの読み方 + +パーマウェブクックブックは、異なる目標に向けた異なるセクションに分かれています。 + +| セクション | 説明 | +| -------------- | ----------------------------------------------------------------------------- | +| コアコンセプト | 開発において知っておくべきパーマウェブの構成要素 | +| ガイド | 開発のためのさまざまなツールに関するスナックサイズのガイド | +| 参考資料 | 一般的に必要とされるコードスニペットへのリファレンス | +| スターターキット | 短時間でパーマウェブ上で構築を開始するためのフロントエンドフレームワークスターター | + +## クイックスタート + +これは、すべての経験レベルの開発者がパーマウェブにコードを送信するのを助けるための小さなガイドです。 + +- [ハローワールド (ノーコード)](getting-started/quick-starts/hw-no-code.md) \ No newline at end of file diff --git a/docs/src/ja/kits/README.md b/docs/src/ja/kits/README.md new file mode 100644 index 0000000..44d1186 --- /dev/null +++ b/docs/src/ja/kits/README.md @@ -0,0 +1,7 @@ +# スターターキット + +スターターキットは、特定のフレームワーク用に設定され、すぐに使用できるボイラープレートリポジトリであり、パーマウェブ上での構築に役立ちます。 + +- [React](./react/index.md) +- [Svelte](./svelte/index.md) +- [Vue](./vue/index.md) \ No newline at end of file diff --git a/docs/src/ja/kits/react/akord.md b/docs/src/ja/kits/react/akord.md new file mode 100644 index 0000000..b649840 --- /dev/null +++ b/docs/src/ja/kits/react/akord.md @@ -0,0 +1,178 @@ +--- +locale: ja +--- +# Vite と Akord を使った React スターターキット + +このガイドでは、開発環境を設定し、パーマウェブ React アプリケーションを構築してデプロイするためのステップバイステップの流れを紹介します。 + +## 前提条件 + +- 基本的な TypeScript の知識(必須ではありません) - [https://www.typescriptlang.org/docs/](Learn Typescript) +- NodeJS v16.15.0 以上 - [https://nodejs.org/en/download/](Download NodeJS) +- ReactJS の知識 - [https://reactjs.org/](Learn ReactJS) +- Git および一般的なターミナルコマンドの知識 + +## 開発依存関係 + +- TypeScript +- NPM または Yarn パッケージマネージャー + +## ステップ + +### React アプリを作成する + + +```sh +yarn create vite my-arweave-app --template react-ts +cd my-arweave-app +yarn +``` + +### React Router DOM を追加 + +```sh +yarn add react-router-dom +``` + +Arweave で動作するアプリを作成するために、ハッシュルーターを使用する必要があります。 + +### ページコンポーネント + +```sh +touch src/Home.tsx src/About.tsx +``` + +src/Home.tsx + +```tsx +import { Link } from "react-router-dom"; + +function Home() { + return ( +
+ Welcome to the Permaweb! + +
About
+ +
+ ); +} + +export default Home; +``` + +src/About.tsx + +```tsx +import { Link } from "react-router-dom"; + +function About() { + return ( +
+ Welcome to the About page! + +
Home
+ +
+ ); +} + +export default About; +``` + +#### App.tsx の修正 + +異なるページを管理するために App.tsx を更新する必要があります。 + +```tsx +import { HashRouter } from "react-router-dom"; +import { Routes, Route } from "react-router-dom"; + +import Home from "./Home"; +import About from "./About"; + +function App() { + return ( + + + } /> + } /> + + + ); +} + +export default App; +``` + +#### Modify index.css + +Alter the `body` selector + +```css +body { + margin: 0; + padding-top: 200px; + display: flex; + flex-direction: column; + place-items: center; + min-width: 100%; + min-height: 100vh; +} +``` + +```sh +yarn dev +``` + +### Building React App + +#### Modify vite.config.ts + +```ts +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + base: "", + plugins: [react()], +}) +``` +#### Build App + +```sh +yarn build +``` + +### Publishing to Arweave + +### Install Akord CLI + +> Requires NodeJS - https://nodejs.org + +```sh +yarn global add @akord/akord-cli +``` + +### Login to Akord (you can create an account [here](https://v2.akord.com/signup)) + +```sh +akord login {your_email_address} +``` + +### Deploy your app + +```sh +akord deploy ./dist 'My perma app' +``` + +### おめでとう! + +あなたはパーマウェブ上に React アプリケーションを公開しました!このアプリは永遠にホストされます! + +## リソースとさらなる学習 + +- [レシピ](https://github.com/Akord-com/recipes) - Arweave ブロックチェーンと簡単に対話する方法を学ぶ +- [Akord CLI](https://github.com/Akord-com/akord-cli) + diff --git a/docs/src/ja/kits/react/create-react-app.md b/docs/src/ja/kits/react/create-react-app.md new file mode 100644 index 0000000..0c91d96 --- /dev/null +++ b/docs/src/ja/kits/react/create-react-app.md @@ -0,0 +1,318 @@ +--- +locale: ja +--- +# Create React App スターターキット + +このガイドでは、開発環境を設定し、パーマウェブ React アプリケーションを構築してデプロイするためのステップバイステップの流れを紹介します。 + +## 前提条件 + +- 基本的な TypeScript の知識(必須ではありません) - [https://www.typescriptlang.org/docs/](Learn Typescript) +- NodeJS v16.15.0 以上 - [https://nodejs.org/en/download/](Download NodeJS) +- ReactJS の知識 - [https://reactjs.org/](Learn ReactJS) +- Git および一般的なターミナルコマンドの知識 + +## 開発依存関係 + +- TypeScript +- NPM または Yarn パッケージマネージャー + +## ステップ + +### プロジェクトを作成する + +TypeScript に不慣れな場合は、追加のチェック `--template typescript` を除外できます。 + + + + +```console:no-line-numbers +npx create-react-app permaweb-create-react-app --template typescript +``` + + + + +```console:no-line-numbers +yarn create react-app permaweb-create-react-app --template typescript +``` + + + + +### Change into the Project Directory + +```sh +cd permaweb-create-react-app +``` + +### react-router-dom をインストールする + +異なるページ間のルーティングを管理するために、このパッケージをインストールする必要があります。 + + + + +```console:no-line-numbers +npm install react-router-dom --save +``` + + + + +```console:no-line-numbers +yarn add react-router-dom -D +``` + + + + + +### アプリを実行する + +次のステップに進む前に、すべてが正常に動作しているか確認する必要があります。次のコマンドを実行してください。 + + + +```console:no-line-numbers +npm start +``` + + + + +```console:no-line-numbers +yarn start +``` + + + +これにより、ローカルマシン上で新しい開発サーバーが起動します。デフォルトでは `PORT 3000` を使用します。このポートがすでに使用されている場合、ターミナルで別の利用可能なポートに切り替えるよう求められる場合があります。 + +### package.json を次の設定に変更する + +```json +{ + ... + "homepage": ".", +} +``` + +### ルーティングを設定する + +アプリケーションを変更し、アバウトページなどの新しいルートを追加します。まず、2つの `.tsx` ファイルを作成します(`--template typescript` のチェックを除外した場合は、コンポーネントファイルの拡張子は `.jsx` または `.js` になります)。 + +```sh +touch src/HomePage.tsx +touch src/About.tsx +``` + +#### HomePage.tsx + +```ts +import { Link } from "react-router-dom"; + +function HomePage() { + return ( +
+ Welcome to the Permaweb! + +
About
+ +
+ ); +} + +export default HomePage; +``` + +#### About.tsx + +```ts +import { Link } from "react-router-dom"; + +function About() { + return ( +
+ Welcome to the About page! + +
Home
+ +
+ ); +} + +export default About; +``` + +#### App.tsx を修正する + +異なるページを管理できるように App.tsx を更新する必要があります。 + +```ts +import { HashRouter } from "react-router-dom"; +import { Routes, Route } from "react-router-dom"; + +import HomePage from "./HomePage"; +import About from "./About"; + +function App() { + return ( + + + } /> + } /> + + + ); +} + +export default App; +``` + +::: info Hash ルーティング +ルートを HashRouter でラップし、react-router-dom の Link コンポーネントを使用してリンクを構築していることに注意してください。これは、現状のパーマウェブでは重要です。これにより、アプリケーションが `https://[gateway]/[TX]` のようなパスで提供されるため、ルートが正しく機能することが保証されます。 +::: + +## 永続的にデプロイする + +### ウォレットを生成する + +ウォレットを生成するために `arweave` パッケージが必要です。 + + + + + + +```console:no-line-numbers +npm install --save arweave +``` + + + + +```console:no-line-numbers +yarn add arweave -D +``` + + + + +then run this command in the terminal + +```sh +node -e "require('arweave').init({}).wallets.generate().then(JSON.stringify).then(console.log.bind(console))" > wallet.json +``` + +### ウォレットに資金を追加する +ArDrive Turbo クレジットでウォレットに資金を追加する必要があります。これを行うには、[ArDrive](https://app.ardrive.io) にアクセスし、ウォレットをインポートします。その後、ウォレットのために Turbo クレジットを購入できます。 + +### Permaweb-Deploy を設定する + + + + + +```console:no-line-numbers +npm install --global permaweb-deploy +``` + + + + +```console:no-line-numbers +yarn global add permaweb-deploy +``` + + + + + + +### Update package.json + +```json +{ + ... + "scripts": { + ... + "deploy": "DEPLOY_KEY=$(base64 -i wallet.json) permaweb-deploy --ant-process << ANT-PROCESS >> --deploy-folder build" + } + ... +} +``` + +::: info +Replace << ANT-PROCESS >> with your ANT process id. +::: + +### ビルドを実行する + +ビルドを生成する時間です。次のコマンドを実行します。 + + + + +```console:no-line-numbers +npm run build +``` + + + + +```console:no-line-numbers +yarn build +``` + + + + +### デプロイを実行する + +最後に、最初の Permaweb アプリケーションをデプロイします。 + + + + +```console:no-line-numbers +npm run deploy +``` + + + + +```console:no-line-numbers +yarn deploy +``` + + + + +::: info ERROR +`Insufficient funds` のエラーが表示された場合、デプロイメント用のウォレットに ArDrive Turbo クレジットを追加するのを忘れないでください。 +::: + +### レスポンス + +次のようなレスポンスが表示されるはずです: + +```shell +Deployed TxId [<>] to ANT [<>] using undername [<>] +``` + +あなたの React アプリは `https://arweave.net/<< tx-id >>` で見つけることができます。 + +::: tip SUCCESS +これで、Permaweb 上に React アプリケーションがあるはずです!素晴らしい仕事です! +::: + +## リポジトリ + +この例の完成版はここで入手できます:[https://github.com/VinceJuliano/permaweb-create-react-app](https://github.com/VinceJuliano/permaweb-create-react-app) + +## まとめ + +これは、Create React App を使用して Permaweb に React アプリを公開する方法です。Permaweb にアプリをデプロイする新しい方法を発見したり、このガイドに掲載されている他のスターターキットをチェックしたりできます! \ No newline at end of file diff --git a/docs/src/ja/kits/react/index.md b/docs/src/ja/kits/react/index.md new file mode 100644 index 0000000..15bc3ce --- /dev/null +++ b/docs/src/ja/kits/react/index.md @@ -0,0 +1,17 @@ +--- +locale: ja +--- +# React スターターキット + +React は、ユーザーインターフェースを構築するために使用される人気のあるライブラリです。create-react-app などの他の人気ツールと組み合わせることで、React プロジェクトはバンドルにコンパイルできます。このバンドルは、トランザクションとしてパーマウェブにアップロードされ、シングルページアプリケーションとして機能します。 + +React スターターキットガイド: + +* [Vite](./turbo.md) - React + Vite、permaweb-deploy で公開 +* [Create React App](./create-react-app.md) - Create React App を利用して React パーマウェブアプリを構築 +* [Akord](./akord.md) - React + Vite、Akord でデプロイ + +::: info パーマウェブアプリケーションの制約 +* 100% フロントエンドアプリケーション(サーバーサイドバックエンドなし) +* アプリケーションはサブパスから提供されます(https://[gateway]/[TX_ID]) +::: \ No newline at end of file diff --git a/docs/src/ja/kits/react/turbo.md b/docs/src/ja/kits/react/turbo.md new file mode 100644 index 0000000..ee207e5 --- /dev/null +++ b/docs/src/ja/kits/react/turbo.md @@ -0,0 +1,327 @@ +--- +locale: ja +--- +# React Starter Kit w/vite & ArDrive + +このガイドでは、Permaweb React アプリケーションを構築してデプロイするための開発環境を構成する手順を説明します。 + +## 前提条件 + +- 基本的な TypeScript の知識(必須ではありません) - [https://www.typescriptlang.org/docs/](TypeScriptを学ぶ) +- NodeJS v16.15.0 以上 - [https://nodejs.org/en/download/](NodeJSをダウンロード) +- ReactJS の知識 - [https://reactjs.org/](ReactJSを学ぶ) +- git と一般的なターミナルコマンドの知識 + +## 開発依存関係 + +- TypeScript +- NPM または Yarn パッケージマネージャ + +## 手順 + +### React アプリを作成する + + + +```sh +npm create vite my-arweave-app --template react-ts +cd my-arweave-app +npm install +``` + + + + +```sh +yarn create vite my-arweave-app --template react-ts +cd my-arweave-app +yarn +``` + + + + +### Add React Router DOM + + + + +```sh +npm install react-router-dom +``` + + + + +```sh +yarn add react-router-dom +``` + + + + + +Arweave で動作するアプリを作成するには、ハッシュルーターを使用する必要があります。 + +### ページコンポーネント + +```sh +touch src/Home.tsx src/About.tsx +``` + +src/Home.tsx + +```tsx +import { Link } from "react-router-dom"; + +function Home() { + return ( +
+ Welcome to the Permaweb! + +
About
+ +
+ ); +} + +export default Home; +``` + +src/About.tsx + +```tsx +import { Link } from "react-router-dom"; + +function About() { + return ( +
+ Welcome to the About page! + +
Home
+ +
+ ); +} + +export default About; +``` + +#### App.tsx を修正する + +異なるページを管理できるように App.tsx を更新する必要があります。 + + +```tsx +import { HashRouter } from "react-router-dom"; +import { Routes, Route } from "react-router-dom"; + +import Home from "./Home"; +import About from "./About"; + +function App() { + return ( + + + } /> + } /> + + + ); +} + +export default App; +``` + +#### index.css を修正する + +`body` セレクタを変更します。 + +```css +body { + margin: 0; + padding-top: 200px; + display: flex; + flex-direction: column; + place-items: center; + min-width: 100%; + min-height: 100vh; +} +``` + +Run the project + + + +```sh +npm run dev +``` + + + + +```sh +yarn dev +``` + + + + + +### React アプリをビルドする + +#### vite.config.ts を修正する + + +```ts +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + base: "", + plugins: [react()], +}) +``` +#### Build App + +```sh +yarn build +``` + +### 永続的にデプロイする + +#### ウォレットを生成する + +ウォレットを生成するために `arweave` パッケージが必要です。 + + + + +```console:no-line-numbers +npm install --save arweave +``` + + + + +```console:no-line-numbers +yarn add arweave -D +``` + + + + +then run this command in the terminal + +```sh +node -e "require('arweave').init({}).wallets.generate().then(JSON.stringify).then(console.log.bind(console))" > wallet.json +``` + +#### ウォレットに資金を追加する +ArDrive Turbo クレジットでウォレットに資金を追加する必要があります。これを行うには、[ArDrive](https://app.ardrive.io) にアクセスし、ウォレットをインポートします。その後、ウォレットのために Turbo クレジットを購入できます。 + +#### Permaweb-Deploy を設定する + + + + +```console:no-line-numbers +npm install --global permaweb-deploy +``` + + + + +```console:no-line-numbers +yarn global add permaweb-deploy +``` + + + + + + +#### Update package.json + +```json +{ + ... + "scripts": { + ... + "deploy": "DEPLOY_KEY=$(base64 -i wallet.json) permaweb-deploy --ant-process << ANT-PROCESS >> " + } + ... +} +``` + +::: info +Replace << ANT-PROCESS >> with your ANT process id. +::: + +#### Run build + +Now it is time to generate a build, run + + + + +```console:no-line-numbers +npm run build +``` + + + + +```console:no-line-numbers +yarn build +``` + + + + +#### デプロイを実行する + +最後に、最初の Permaweb アプリケーションをデプロイします。 + + + + + + +```console:no-line-numbers +npm run deploy +``` + + + + +```console:no-line-numbers +yarn deploy +``` + + + + +::: info ERROR +`Insufficient funds` エラーが表示された場合は、デプロイメント用のウォレットに ArDrive Turbo クレジットを追加したことを確認してください。 +::: + +#### 応答 + +以下のような応答が表示されるはずです: + +```shell +Deployed TxId [<>] to ANT [<>] using undername [<>] +``` + +あなたの React アプリは `https://arweave.net/<< tx-id >>` で見つけることができます。 + +::: tip SUCCESS +これで、Permaweb 上に React アプリケーションを持っていることになります!素晴らしい仕事です! +::: +### おめでとうございます! + +あなたは Permaweb に React アプリケーションを公開しました!このアプリは永遠にホストされます! \ No newline at end of file diff --git a/docs/src/ja/kits/react/vite.md b/docs/src/ja/kits/react/vite.md new file mode 100644 index 0000000..0d8553b --- /dev/null +++ b/docs/src/ja/kits/react/vite.md @@ -0,0 +1,349 @@ +--- +locale: ja +--- +# Vite スターターキット + +このガイドでは、Permaweb の React アプリケーションを構築してデプロイするために、開発環境を設定する手順を説明します。 + +## 前提条件 + +- 基本的な TypeScript の知識(必須ではありません) - [https://www.typescriptlang.org/docs/](TypeScript を学ぶ) +- NodeJS v16.15.0 以上 - [https://nodejs.org/en/download/](NodeJS をダウンロード) +- ReactJS の知識 - [https://reactjs.org/](ReactJS を学ぶ) +- Git と一般的なターミナルコマンドの知識 + +## 開発依存関係 + +- TypeScript +- NPM または Yarn パッケージマネージャ + +## 手順 + +### プロジェクトの作成 + +TypeScript に不慣れな場合は、テンプレート「react」を使用できます(`--template react`)。 + + + +```console:no-line-numbers +npm create vite@latest my-arweave-app -- --template react-ts +``` + + + + +```console:no-line-numbers +yarn create vite my-arweave-app --template react-ts +``` + + + + +### Change into the Project Directory + +```sh +cd my-arweave-app +``` + +### Install react-router-dom + +You have to install this package to manage routing between different pages + + + + +```console:no-line-numbers +npm install react-router-dom --save +``` + + + + +```console:no-line-numbers +yarn add react-router-dom -D +``` + + + + +### Run the App + +Now we need to check if everything is going Perfect before jumping into next Step, Run + + + +```console:no-line-numbers +npm run dev +``` + + + + +```console:no-line-numbers +yarn dev +``` + + + + +デフォルトでは、ローカルマシン上で新しい開発サーバーが開始され、`PORT 3000` が使用されます。このポートがすでに使用中の場合、ターミナルで利用可能な別のポートに切り替えるように求められることがあります。 + +### ウォレットの種類を設定 + +[ArConnect](https://arconnect.io)、[Arweave.app](https://arweave.app) または他のブラウザベースのウォレットを使用したい場合は、`window.arweaveWallet` の宣言を持つ ArConnect のタイプパッケージをインストールできます。 + + + + + +```console:no-line-numbers +npm install arconnect -D +``` + + + + +```console:no-line-numbers +yarn add arconnect -D +``` + + + + +After installing the package, you'll need to add it to your `src/vite-env.d.ts` file. + +```ts +/// +``` + +### Setup Routing + +Now modify the application and add a new routes such as an about page, first create 2 more .tsx files. (if you have used the vanilla JS react template, then make sure your component file extension should be `.jsx or .js`) + +```sh +touch src/HomePage.tsx +touch src/About.tsx +``` + +#### HomePage.tsx + +```ts +import { Link } from "react-router-dom"; + +function HomePage() { + return ( +
+ Welcome to the Permaweb! + +
About
+ +
+ ); +} + +export default HomePage; +``` + +#### About.tsx + +```ts +import { Link } from "react-router-dom"; + +function About() { + return ( +
+ Welcome to the About page! + +
Home
+ +
+ ); +} + +export default About; +``` + +#### Modify App.tsx + +We need to update the App.tsx to manage different pages + +```ts +import { HashRouter } from "react-router-dom"; +import { Routes, Route } from "react-router-dom"; + +import HomePage from "./HomePage"; +import About from "./About"; + +function App() { + return ( + + + } /> + } /> + + + ); +} + +export default App; +``` + +::: info ハッシュルーティング +ルートを HashRouter でラップし、react-router-dom の Link コンポーネントを使用してリンクを構築していることに注意してください。 +これは現在の状態の Permaweb では重要であり、アプリケーションが `https://[gateway]/[TX]` のようなパスで提供されるため、ルートが適切に機能することを保証します。 +::: + +## 永続的にデプロイ + +### ウォレットを生成する + +ウォレットを生成するために `arweave` パッケージが必要です。 + + + + +```console:no-line-numbers +npm install --save arweave +``` + + + + +```console:no-line-numbers +yarn add arweave -D +``` + + + + +then run this command in the terminal + +```sh +node -e "require('arweave').init({}).wallets.generate().then(JSON.stringify).then(console.log.bind(console))" > wallet.json +``` + +### vite 設定の更新 + +vite 設定オブジェクトに `base` プロパティを追加し、空の文字列に設定してください。 + +vite.config.ts + +```ts +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + base: '', + plugins: [react()], +}) +``` + +### Irys のセットアップ + +アプリを Permaweb にデプロイするために Irys が必要です。Irys は即時データのアップロードと取得を提供します。 + + + + +```console:no-line-numbers +npm install --global @irys/sdk +``` + + + + +```console:no-line-numbers +yarn global add @irys/sdk +``` + + + + +::: info +このウォレットに AR を追加し、Irys ウォレットに資金を供給する必要があります。このアプリをアップロードできるようにするためです。詳細については [https://irys.xyz](https://irys.xyz) と [https://www.arweave.org/](https://www.arweave.org/) をご覧ください。 +::: + +### Update package.json + +```json +{ + ... + "scripts": { + ... + "deploy": "irys upload-dir ./dist -h https://node2.irys.xyz --wallet ./wallet.json -t arweave --index-file index.html --no-confirmation" + } + ... +} +``` + +### Run build + +Now its time to Generate Build + + + + +```console:no-line-numbers +npm run build +``` + + + + +```console:no-line-numbers +yarn build +``` + + + + +### Run deploy + +Finally we are good to deploy our First Permaweb Application + + + + +```console:no-line-numbers +npm run deploy +``` + + + + +```console:no-line-numbers +yarn deploy +``` + + + + +::: tip SUCCESS +これで Permaweb 上に React アプリケーションができました!素晴らしい仕事です! +::: + +::: tip ERROR +もしこのエラー `データを送信するための資金が不足しています` が表示された場合は、ウォレットにいくらかの AR を資金を供給し、その後再度デプロイを試みてください。 +::: + +## Irys アカウントに資金を供給する方法 + +### 残高を確認 + + +```console:no-line-numbers +irys balance [Address] -h https://node2.irys.xyz -t arweave +``` + +Fund Irys + +```console:no-line-numbers +irys fund 20000000000 -t arweave -h https://node2.irys.xyz -w ./wallet.json +``` + +::: tip INFO +資金が Irys アカウントに入金されるまでに約 20 ~ 30 分かかります。 +::: + + diff --git a/docs/src/ja/kits/svelte/index.md b/docs/src/ja/kits/svelte/index.md new file mode 100644 index 0000000..882b566 --- /dev/null +++ b/docs/src/ja/kits/svelte/index.md @@ -0,0 +1,16 @@ +--- +locale: ja +--- +# Svelte スターターキット + +Svelte は、JavaScript バンドルにコンパイルされるフレームワークで、アプリの配布からフレームワークを削除します。これにより、他のフレームワークに比べてはるかに小さなフットプリントが実現されます。Svelte はパーマウェブアプリケーションに最適なフレームワークです。パーマウェブアプリケーションはシングルページアプリケーションの原則に基づいて構築されますが、Arweave ネットワーク上に存在し、パーマウェブゲートウェイによって配布されます。 + +Svelte スターターキットガイド: + +* [最小限](./minimal.md) - Svelte パーマウェブアプリを構築するために必要な最小限の要素 +* [Vite](./vite.md) - Svelte、TypeScript、および Vite + +::: info パーマウェブアプリケーションの制約 +* 100% フロントエンドアプリケーション(サーバーサイドバックエンドなし) +* アプリケーションはサブパスから提供されます(https://[gateway]/[TX_ID]) +::: \ No newline at end of file diff --git a/docs/src/ja/kits/svelte/minimal.md b/docs/src/ja/kits/svelte/minimal.md new file mode 100644 index 0000000..ee3683a --- /dev/null +++ b/docs/src/ja/kits/svelte/minimal.md @@ -0,0 +1,328 @@ +--- +locale: ja +--- +# Minimal Svelte Starter Kit + +このガイドでは、Permaweb アプリケーションを構築しデプロイするための開発環境を構成する手順を説明します。 + +## 前提条件 + +- TypeScript の知識 +- NodeJS v18 以上 +- Svelte の知識 - [https://svelte.dev](https://svelte.dev) +- Git と一般的なターミナルコマンドの知識 + +## 開発依存関係 + +- TypeScript +- esbuild +- w3 + +## 手順 + +### プロジェクトの作成 + + + + +```console:no-line-numbers +mkdir myproject +cd myproject +npm init -y +npm install -D svelte esbuild typescript esbuild-svelte tinro svelte-preprocess +``` + + + + + +```console:no-line-numbers +mkdir myproject +cd myproject +yarn init -y +yarn add -D svelte esbuild typescript esbuild-svelte tinro svelte-preprocess +``` + + + + +## Create buildscript.js + +```js +import fs from "fs"; +import esbuild from "esbuild"; +import esbuildSvelte from "esbuild-svelte"; +import sveltePreprocess from "svelte-preprocess"; + +//make sure the directoy exists before stuff gets put into it +if (!fs.existsSync("./dist/")) { + fs.mkdirSync("./dist/"); +} +esbuild + .build({ + entryPoints: [`./src/main.ts`], + bundle: true, + outdir: `./dist`, + mainFields: ["svelte", "browser", "module", "main"], + // logLevel: `info`, + splitting: true, + write: true, + format: `esm`, + plugins: [ + esbuildSvelte({ + preprocess: sveltePreprocess(), + }), + ], + }) + .catch((error, location) => { + console.warn(`Errors: `, error, location); + process.exit(1); + }); + +//use a basic html file to test with +fs.copyFileSync("./index.html", "./dist/index.html"); +``` + +## Modify package.json + +Set `type` to `module`, add a build script + +```json +{ + "type": "module" + ... + "scripts": { + "build": "node buildscript.js" + } +} +``` + +## Create `src` directory and some src files + +```sh +mkdir src +touch src/main.ts +touch src/app.svelte +touch src/counter.svelte +touch src/about.svelte +``` + +### Main.ts + +```ts +import App from "./app.svelte"; + +new App({ + target: document.body, +}); +``` + +### app.svelte + +```html + + + + +``` + +::: info Hash Routing +スクリプトセッションにある `router.mode.hash()` 設定に注意してください。これは、アプリケーションをハッシュベースのルーティングを使用するように構成するために重要です。これにより、アプリケーションを `https://[gateway]/[TX]` のようなパスで実行する際の URL サポートが可能になります。 +::: + +### counter.svelte + +```html + +

Hello Permaweb

+ +

Count: {count}

+``` + +### about.svelte + +```html +

About Page

+

Minimal About Page

+Home +``` + +## Add index.html + +```html + + + + + + + Vite + Svelte + TS + + +
+ + + +``` + +## 永続的なデプロイ + +### ウォレットの生成 + +ウォレットを生成するために `arweave` パッケージが必要です。 + + + + +```console:no-line-numbers +npm install --save arweave +``` + + + + +```console:no-line-numbers +yarn add arweave -D +``` + + + + +then run this command in the terminal + +```sh +node -e "require('arweave').init({}).wallets.generate().then(JSON.stringify).then(console.log.bind(console))" > wallet.json +``` + +### ウォレットに資金を追加 +ウォレットに ArDrive Turbo クレジットを追加する必要があります。これを行うには、[ArDrive](https://app.ardrive.io) にアクセスし、ウォレットをインポートします。 +その後、ウォレットのためにターボクレジットを購入できます。 + +### Permaweb-Deploy のセットアップ + + + + +```console:no-line-numbers +npm install --global permaweb-deploy +``` + + + + +```console:no-line-numbers +yarn global add permaweb-deploy +``` + + + + +### Update vite.config.ts + +```ts +import { defineConfig } from 'vite' +import { svelte } from '@sveltejs/vite-plugin-svelte' + +export default defineConfig({ + plugins: [svelte()], + base: './' +}) +``` + +### Update package.json + +```json +{ + ... + "scripts": { + ... + "deploy": "DEPLOY_KEY=$(base64 -i wallet.json) permaweb-deploy --ant-process << ANT-PROCESS >> --deploy-folder build" + } + ... +} +``` + +::: info +Replace << ANT-PROCESS >> with your ANT process id. +::: + +### Run build + +Now it is time to generate a build, run + + + + +```console:no-line-numbers +npm run build +``` + + + + +```console:no-line-numbers +yarn build +``` + + + + +### Run deploy + +Finally we are good to deploy our first Permaweb Application + + + + +```console:no-line-numbers +npm run deploy +``` + + + + +```console:no-line-numbers +yarn deploy +``` + + + + +::: info ERROR +資金不足のエラー `Insufficient funds` が表示された場合は、デプロイ用のウォレットに ArDrive Turbo クレジットを追加したことを確認してください。 +::: + +### 応答 + +次のような応答が表示されるはずです: + +```shell +Deployed TxId [<>] to ANT [<>] using undername [<>] +``` + +あなたの Svelte アプリは `https://arweave.net/<< tx-id >>` で見つけることができます。 + +::: tip SUCCESS +これで Permaweb に Svelte アプリケーションを持つことができました!素晴らしい仕事です! +::: + +## リポジトリ + +この例の完全なバージョンは、こちらで利用できます: [https://github.com/twilson63/permaweb-minimal-svelte-starter](https://github.com/twilson63/permaweb-minimal-svelte-starter) + +## まとめ + +これは Permaweb に Svelte アプリケーションを公開するための最小限のバージョンですが、ホットリロードや Tailwind などの機能を追加したいかもしれません。その場合は、ターンキーのスターターキットである `hypar` をチェックしてください。 [HypAR](https://github.com/twilson63/hypar) \ No newline at end of file diff --git a/docs/src/ja/kits/svelte/vite.md b/docs/src/ja/kits/svelte/vite.md new file mode 100644 index 0000000..771d41f --- /dev/null +++ b/docs/src/ja/kits/svelte/vite.md @@ -0,0 +1,339 @@ +--- +locale: ja +--- +# Svelte/Vite スターターキット + +Svelte は、余計なものをコンパイルし、コンパクトなパッケージを生成するフレームワークで、Permaweb に最適です。開発者として、私たちはユーザーエクスペリエンスと同じくらい、開発エクスペリエンス (DX) を重視しています。このキットは、開発者に素晴らしい DX 経験を提供するために `vite` バンドルシステムを使用しています。 + +## Svelte と TypeScript を使用した vite のインストール + + + + + + +```console +npm create vite@latest my-perma-app --template svelte-ts +``` + + + + +```console +npm create vite@latest my-perma-app -- --template svelte-ts +``` + + + + +```console +yarn create vite my-perma-app --template svelte-ts +``` + + + + +```console +pnpm create vite my-perma-app --template svelte-ts +``` + + + + +## プロジェクト情報 + +vite のビルドシステムは、index.html ファイルをルートディレクトリに配置します。ここに必要に応じて CSS やグローバルスクリプトの依存関係を含めることができます。vite プロジェクトのレイアウトに関する詳細は、[vite ドキュメント](https://vitejs.dev/guide/#index-html-and-project-root)を参照してください。 + +## ハッシュルーターのセットアップ + +ハッシュルーターをセットアップするために、[tinro](https://github.com/AlexxNB/tinro)を使用します。`tinro` は、React Router に似た小さな宣言型ルーティングライブラリです。 + + + + +```console +npm install --save-dev tinro +``` + + + + +```console +yarn add -D tinro +``` + + + + +## Svelte にハッシュルーティングを使用するよう指示する + +`src/App.svelte` ファイルで、ルーターをハッシュルーティングモードを使用するように設定します。 + +```html + +
+``` + +`router.mode.hash` 関数は、ハッシュルーター モードをオンにします。 +`router.subscribe` コールバックは、ページ遷移時にページを最上部にリセットするのに便利です。 + +## トランジション コンポーネントの追加 + +これらのコンポーネントは、ルーティング時に1ページから別のページへの遷移を管理します。 + +`src` ディレクトリの下に `components` というディレクトリを作成し、次の2つのファイルを追加します。 + +### announcer.svelte + +```html + + +
{#key current} Navigated to {current} {/key}
+ + +``` + +> This component is for screen readers announcing when a page changes + +### transition.svelte + +```html + + +{#key $router.path} +
+ +
+{/key} +``` + +> This component adds a fade to the page transition + +## Adding Routes to the app + +```html + + + + + + + + + + +``` + +アナウンサーおよびトランジションコンポーネントをルーティングシステムに追加することで、ページ遷移のアナウンスと遷移のアニメーションを処理します。 + +## ページを作成する + +### home.svelte + +```html + +

Hello Permaweb

+ +

Count: {count}

+About +``` + +### about.svelte + +```html +

About Page

+

Svelte/Vite About Page

+Home +``` + +### Modify `App.svelte` + +```html + +... +``` + +## 永続的にデプロイする + +### ウォレットを生成する + +`arweave` パッケージを使用してウォレットを生成する必要があります。 + + + + +```console:no-line-numbers +npm install --save arweave +``` + + + + +```console:no-line-numbers +yarn add arweave -D +``` + + + + +then run this command in the terminal + +```sh +node -e "require('arweave').init({}).wallets.generate().then(JSON.stringify).then(console.log.bind(console))" > wallet.json +``` + +### ウォレットに資金を追加する +ウォレットに ArDrive Turbo クレジットを追加する必要があります。これを行うには、[ArDrive](https://app.ardrive.io) にアクセスしてウォレットをインポートします。 +その後、ウォレットのためにターボクレジットを購入できます。 + +### Permaweb-Deployの設定 + + + + +```console:no-line-numbers +npm install --global permaweb-deploy +``` + + + + +```console:no-line-numbers +yarn global add permaweb-deploy +``` + + + + +### Update vite.config.ts + +```ts +import { defineConfig } from 'vite' +import { svelte } from '@sveltejs/vite-plugin-svelte' + +export default defineConfig({ + plugins: [svelte()], + base: './' +}) +``` + +### Update package.json + +```json +{ + ... + "scripts": { + ... + "deploy": "DEPLOY_KEY=$(base64 -i wallet.json) permaweb-deploy --ant-process << ANT-PROCESS >> --deploy-folder build" + } + ... +} +``` + +::: info +Replace << ANT-PROCESS >> with your ANT process id. +::: + +### ビルドを実行する + +今こそビルドを生成する時です。以下のコマンドを実行します。 + + + + +```console:no-line-numbers +npm run build +``` + + + + +```console:no-line-numbers +yarn build +``` + + + + +### デプロイを実行する + +最終的に、私たちは初めてのPermawebアプリケーションをデプロイする準備が整いました。 + + + +```console:no-line-numbers +npm run deploy +``` + + + + +```console:no-line-numbers +yarn deploy +``` + + + + +::: info ERROR +`Insufficient funds`というエラーが発生した場合は、デプロイ用のウォレットにArDrive Turboクレジットを資金供給したことを確認してください。 +::: + +### レスポンス + +次のようなレスポンスが表示されるはずです: + +```shell +Deployed TxId [<>] to ANT [<>] using undername [<>] +``` + +Your Svelte app can be found at `https://arweave.net/<< tx-id >>`. + +::: tip SUCCESS +あなたは今、PermawebにSvelteアプリケーションを持っています!素晴らしい仕事です! +::: + +## リポジトリ + +この例の完成版は以下で入手できます: [https://github.com/twilson63/svelte-ts-vite-example](https://github.com/twilson63/svelte-ts-vite-example) + +## まとめ + +これはPermawebにSvelteアプリケーションを公開するための最小限のバージョンですが、ホットリロードやTailwindなど、さらに多くの機能が欲しいかもしれません。ターンキーのスターターキットとして`hypar`をチェックしてください。 [HypAR](https://github.com/twilson63/hypar) \ No newline at end of file diff --git a/docs/src/ja/kits/vue/create-vue.md b/docs/src/ja/kits/vue/create-vue.md new file mode 100644 index 0000000..d552ada --- /dev/null +++ b/docs/src/ja/kits/vue/create-vue.md @@ -0,0 +1,283 @@ +--- +locale: ja +--- +# Vue スターターキットの作成 + +このガイドでは、開発環境を設定し、パーマウェブ Vue アプリケーションを構築するための手順を提供します。 + +## 前提条件 + +- 基本的な TypeScript の知識(必須ではありません) - [TypeScript を学ぶ](https://www.typescriptlang.org/docs/) +- NodeJS v16.15.0 以上 - [NodeJS をダウンロード](https://nodejs.org/en/download/) +- Vue.js(できれば Vue 3)の知識 - [Vue.js を学ぶ](https://vuejs.org/) +- Git と一般的なターミナルコマンドを知っていること + +## 開発依存関係 + +- TypeScript(オプション) +- NPM または Yarn パッケージマネージャ + +## 手順 + +### プロジェクトを作成する + +次のコマンドは、Vue プロジェクト用の公式スキャフォールディングツールである create-vue をインストールして起動します。 + + + + +```console:no-line-numbers +npm init vue@latest +``` + + + + +```console:no-line-numbers +yarn create vue +``` + + + + +プロセス中に、TypeScriptやテストサポートなどのオプション機能を選択するように求められます。`Vue Router`を「はい」で選択することをお勧めします。他はお好みに応じて選択してください。 + + +```console:no-line-numbers +✔ Project name: … +✔ Add TypeScript? … No / Yes +✔ Add JSX Support? … No / Yes +✔ Add Vue Router for Single Page Application development? … No / *Yes* +✔ Add Pinia for state management? … No / Yes +✔ Add Vitest for Unit testing? … No / Yes +✔ Add Cypress for both Unit and End-to-End testing? … No / Yes +✔ Add ESLint for code quality? … No / Yes +✔ Add Prettier for code formatting? … No / Yes +``` + +### Change into the Project Directory + +```sh +cd +``` + +### Install Dependencies + + + + +```console:no-line-numbers +npm install +``` + + + + +```console:no-line-numbers +yarn +``` + + + + +### ルーターの設定 + +Vue RouterはVue.jsの公式ルーターで、Vueとシームレスに統合されます。パーマウェブで機能させるために、ブラウザの履歴ルーターからハッシュルーターに切り替えます。URLはサーバーに送信できないため、`src/router/index.ts`または`src/router/index.js`ファイルで`createWebHistory`を`createWebHashHistory`に変更します。 + +```ts +import { createRouter, createWebHashHistory } from "vue-router"; +import HomeView from "../views/HomeView.vue"; + +const router = createRouter({ + history: createWebHashHistory(import.meta.env.BASE_URL), + routes: [ + { + path: "/", + name: "home", + component: HomeView, + }, + { + path: "/about", + name: "about", + component: () => import("../views/AboutView.vue"), + }, + ], +}); + +export default router; +``` + +### ビルドの設定 + +`vite.config.ts`または`vite.config.js`ファイルでビルドプロセスを設定します。パーマウェブアプリをサブパス(https://[gateway]/[TX_ID])から提供するために、設定ファイルのbaseプロパティを./に更新します。 + + +```ts +export default defineConfig({ + base: './', + ... +}) +``` + +### アプリを実行する + +先に進む前に、すべてが正しく機能していることを確認することが重要です。スムーズに進行するためにチェックを実行してください。 + + + + +```console:no-line-numbers +npm run dev +``` + + + + +```console:no-line-numbers +yarn dev +``` + + + +デフォルトでは、ローカルで新しい開発サーバーが開始され、`PORT 5173`を使用します。このポートがすでに使用されている場合、ポート番号を1増やして(`PORT 5174`)再試行します。 + +## 永続的にデプロイ + +### ウォレットを生成する + +ウォレットを生成するために`arweave`パッケージが必要です。 + + + + +```console:no-line-numbers +npm install --save arweave +``` + + + + +```console:no-line-numbers +yarn add arweave -D +``` + + + + +then run this command in the terminal + +```sh +node -e "require('arweave').init({}).wallets.generate().then(JSON.stringify).then(console.log.bind(console))" > wallet.json +``` + +### ウォレットに資金を供給する + +ウォレットにArDrive Turboクレジットを供給する必要があります。これを行うには、[ArDrive](https://app.ardrive.io)にアクセスし、ウォレットをインポートします。次に、ウォレットのためにターボクレジットを購入できます。 + +### Permaweb-Deployを設定する + + + + + +```console:no-line-numbers +npm install --global permaweb-deploy +``` + + + + +```console:no-line-numbers +yarn global add permaweb-deploy +``` + + + + +### Update package.json + +```json +{ + ... + "scripts": { + ... + "deploy": "DEPLOY_KEY=$(base64 -i wallet.json) permaweb-deploy --ant-process << ANT-PROCESS >> --deploy-folder build" + } + ... +} +``` + +::: info +Replace << ANT-PROCESS >> with your ANT process id. +::: + +### ビルドを実行する + +今、ビルドを生成する時が来ました。次のコマンドを実行します。 + + + + +```console:no-line-numbers +npm run build +``` + + + + +```console:no-line-numbers +yarn build +``` + + + + +### デプロイを実行する + +最後に、最初のパーマウェブアプリケーションをデプロイします。 + + + + +```console:no-line-numbers +npm run deploy +``` + + + + +```console:no-line-numbers +yarn deploy +``` + + + + +::: info ERROR +`Insufficient funds`というエラーが表示された場合は、デプロイ用のウォレットにArDrive Turboクレジットを供給するのを忘れていないことを確認してください。 +::: + +### 応答 + +次のような応答が表示されるはずです。 + + +```shell +Deployed TxId [<>] to ANT [<>] using undername [<>] +``` + +あなたのVueアプリは`https://arweave.net/<< tx-id >>`で見つけることができます。 + +::: tip SUCCESS +これで、パーマウェブ上にVueアプリケーションができました!お疲れ様です! +::: + +## リポジトリ + +JavaScriptまたはTypeScriptでの完全な機能例は、以下の場所で見つけることができます。 + +- リポジトリ: [https://github.com/ItsAnunesS/permaweb-create-vue-starter](https://github.com/ItsAnunesS/permaweb-create-vue-starter) + +## まとめ + +このガイドでは、Create Vueを使用してパーマウェブにVue.jsアプリを公開するためのシンプルな手順を提供します。追加機能が必要な場合は、ガイドにリストされている代替スターターキットを探索して、要件に合ったソリューションを見つけることを検討してください。 \ No newline at end of file diff --git a/docs/src/ja/kits/vue/index.md b/docs/src/ja/kits/vue/index.md new file mode 100644 index 0000000..1ba036a --- /dev/null +++ b/docs/src/ja/kits/vue/index.md @@ -0,0 +1,18 @@ +--- +locale: ja +--- +# Vue スターターキット + +Vue.js は、ユーザーインターフェースを構築するための進歩的なJavaScriptフレームワークです。他のフレームワークとは異なり、テンプレートを実行時にJavaScriptにコンパイルするため、ファイルサイズが小さく、パフォーマンスが向上します。Vueは、高速でスケーラブルなシングルページアプリケーションを構築するのに最適であり、フロントエンド開発者の間で人気があります。 + +Vue スターターキットガイド: + +**注意:** - `npm init vue@latest` はすでに vite を使用しているため、Vue用の vite ガイドは含まれていません。 + +- [Vueアプリを作成](./create-vue.md) - Create Vueを使用して、TypeScriptとViteを用いた効率的なVue.jsベースの最新パーマウェブアプリケーションを構築します。 + +::: info パーマウェブアプリケーションの制約 + +- 100% フロントエンドアプリケーション(サーバーサイドバックエンドなし) +- アプリケーションはサブパスから提供されます(https://[gateway]/[TX_ID]) +::: \ No newline at end of file diff --git a/docs/src/ja/references/README.md b/docs/src/ja/references/README.md new file mode 100644 index 0000000..4655aa5 --- /dev/null +++ b/docs/src/ja/references/README.md @@ -0,0 +1,14 @@ +--- +locale: ja +title: パーマウェブクックブック - 参考資料 +--- + +# 参考資料 + +バンドリング、GraphQL、HTTP APIなどのさまざまなトピックについて深く学ぶための参考資料。 + +- [バンドリング](bundling.md) +- [GraphQL](gql.md) +- [HTTP API](http-api) + +> パーマウェブに関するガイドが不足していると思いますか?[Github](https://github.com/twilson63/permaweb-cookbook/issues)に問題を作成するか、[貢献](../getting-started/contributing.md)を検討してください。 \ No newline at end of file diff --git a/docs/src/ja/references/bundling.md b/docs/src/ja/references/bundling.md new file mode 100644 index 0000000..9ba1687 --- /dev/null +++ b/docs/src/ja/references/bundling.md @@ -0,0 +1,176 @@ +--- +locale: ja +--- +# バンドリング + +以下の参考資料を始める前に、[コアコンセプト](/concepts/)の[バンドルとバンドリング](/concepts/bundles.md)を読んでおくことをお勧めします。 + +## セットアップ + +私たちは、[arbundles](https://github.com/irys-xyz/arbundles)ライブラリを使用します。これは、[ANS-104仕様](https://github.com/ArweaveTeam/arweave-standards/blob/master/ans/ANS-104.md)のJavaScript実装です。ArBundlesはTypeScriptサポートも提供しています。 + +**注意:** この参考資料はNodeJS環境を前提としています。ArBundlesのブラウザ互換性は可能ですが、現在は`Buffer`ポリフィルを扱う必要があります。これは将来のArBundlesのバージョンで解決される予定です。 + + + + +```console +npm install arbundles +``` + + + + +```console +yarn add arbundles +``` + + + + +## `Signer`を作成する + +データアイテムを作成するには、まず`Signer`を作成する必要があります。 + + + + +```ts:no-line-numbers +import { ArweaveSigner, JWKInterface } from 'arbundles' + +const jwk: JWKInterface = { /* your Arweave jwk keyfile */ } +const signer = new ArweaveSigner(jwk) +``` + + + + +## `DataItem`を作成する + +`DataItem`を作成するには、いくつかのデータと`Signer`を`createData()`ユーティリティ関数に渡します。 + +**注意:** `createData()`ユーティリティ関数は`Signer`を必要としますが、返される`DataItem`は**まだ署名されておらず**、プレースホルダーIDが含まれています。 + + + + +```ts:no-line-numbers +import { createData } from 'arbundles' + +// Create a DataItem from a string +const myStringData: string = 'Hello, Permaweb!' +const myDataItem = createData(myStringData, signer) + +// Create a DataItem from a Buffer or Uint8Array +const myBufferData: Buffer | Uint8Array = Buffer.from('Hello, Permaweb!') +const myOtherDataItem = createData(myBufferData, signer) + +/* !!!WARNING!!! DATA ITEM ARE NOT YET SIGNED! */ +``` + + + + +## `Bundle`を作成する + +`Bundle`を作成するには、`DataItem`を`bundleAndSignData`ユーティリティ関数に渡し、結果を`await`します。 + +**注意:** このユーティリティ関数に渡される`DataItem`は、後のセクションで詳述されているように、事前に署名されている場合があります。 + + + + +```ts:no-line-numbers +import { bundleAndSignData } from 'arbundles' + +const dataItems = [ myDataItem, myOtherDataItem ] +const bundle = await bundleAndSignData(dataItems, signer) +``` + + + + +## `Bundle`から`Transaction`を作成する + +`Bundle`をArweaveに投稿するには、最終的に`Bundle`を含むルートLayer 1の`Transaction`が必要です。 + + + + +```ts:no-line-numbers +import Arweave from 'Arweave' + +// Set up an Arweave client +const arweave = new Arweave({ + protocol: 'https', + host: 'arweave.net', + port: 443 +}) + +// Create using ArweaveJS +const tx = await arweave.createTransaction({ data: bundle.getRaw() }, jwk) + +// OR Create from the Bundle itself +const tx = await bundle.toTransaction({}, arweave, jwk) + +// Sign the transaction +await arweave.transactions.sign(tx, jwk) + +// Post tx to Arweave with your preferred method! +``` + + + + +## `DataItem`に署名する + +`DataItem`のID(例えば、同じバンドルに含まれるマニフェストで使用するため)を取得するには、その`.sign()`メソッドを呼び出して`await`する必要があります。署名が成功すると、`DataItem`は独自のIDと署名を持ち、`Bundle`に追加する準備が整います。 + + + + +```ts:no-line-numbers +await myDataItem.sign(signer) +await myOtherDataItem.sign(signer) + +const id1 = myDataItem.id +const id2 = myOtherDataItem.id +``` + + + + +## `DataItem`にタグ付けする + +`DataItem`は、Layer 1のArweaveトランザクションと同様に、タグを持つことができます。Arweaveゲートウェイが`Bundle`をアンバンドルしてインデックス化すると、これらの`DataItem`タグは、Layer 1のArweaveトランザクションのタグと同じようにクエリ可能になります。 + + + + +```ts:no-line-numbers + const myStringData: string = 'Hello, Permaweb!' + const tags = [ + { name: 'Title', value: 'Hello Permaweb' }, + { name: 'Content-Type', value: 'text/plain' } + ] + const myDataItem = createData(myStringData, signer, { tags }) +``` + + + + +## バンドルの消費 + +**警告:** `new Bundle(buffer)`に渡す`Buffer`が`Bundle`を含んでいることを確認してください。そうでない場合、非常に小さな`Buffer`が渡されるとスレッドがクラッシュします。**本番環境では** `new Bundle(buffer)`を使用しないでください。代わりに、ArBundlesリポジトリの[ストリーミングインターフェース](https://github.com/irys-xyz/arbundles/blob/master/src/stream)を参照してください。 + + + + +```ts:no-line-numbers + const bundle = new Bundle(Buffer.from(tx.data)) + const myDataItem = bundle.get(0) + const myOtherDataItem = bundle.get(1) +``` + + + diff --git a/docs/src/ja/references/gql.md b/docs/src/ja/references/gql.md new file mode 100644 index 0000000..9571c27 --- /dev/null +++ b/docs/src/ja/references/gql.md @@ -0,0 +1,158 @@ +--- +locale: ja +--- + +# トランザクションの完全なGraphQL構造 +次のGraphQLクエリは、インデックスサービスによってキャプチャされたトランザクションのすべてのプロパティを返します。 + +```graphql:no-line-numbers +query { + transactions { + + pageInfo { + hasNextPage + } + edges { + cursor + node { + id + anchor + signature + recipient + owner { + address + key + } + fee { + winston + ar + } + quantity { + winston + ar + } + data { + size + type + } + tags { + name + value + } + block { + id + timestamp + height + previous + } + parent { + id + } + } + } + } +} + +``` + +## ページネーション +デフォルトでは、GraphQLクエリは最初の10件の結果を返します。より大きな結果セットを要求するには、トランザクションクエリに `first: X` オプションを追加します(ここで `X` は1から100の値)。 + +```graphql{4} +query +{ + transactions( + first:100, + tags: [ + { + name: "App-Name", + values: ["PublicSquare"] + } + ] + ) + { + edges { + node { + id + tags { + name + value + } + } + } + } +} + +``` +結果セットに100件を超えるアイテムがある場合、カーソルを使用して次のページの結果を取得できます。 +```graphql{13-15,17} +query +{ + transactions( + first:100, + tags: [ + { + name: "App-Name", + values: ["PublicSquare"] + } + ] + ) + { + pageInfo { + hasNextPage + } + edges { + cursor + node { + id + tags { + name + value + } + } + } + } +} +``` +次の結果ページがある場合、`hasNextPage`の値は`true`になります。結果セットの最後のアイテムの`cursor`値を取得し、それを`after`クエリパラメーターの値として使用します。 +```graphql{5} +query +{ + transactions( + first:100, + after: "WyIyMDIyLTEyLTMwVDE2OjQ0OjIzLjc0OVoiLDEwMF0=", + tags: [ + { + name: "App-Name", + values: ["PublicSquare"] + } + ] + ) + { + pageInfo { + hasNextPage + } + edges { + cursor + node { + id + tags { + name + value + } + } + } + } +} +``` + +すべての結果セットを取得するには、`hasNextPage`が`false`になるまで、各ページの最後のアイテムから取得した`cursor`値を使用して`after`クエリを繰り返します。 + +## レート制限 +インデックスサービスは、攻撃やサービスの悪用を防ぐためにレート制限を実施します。`arweave.net/graphql`サービスは、GraphQLクエリを5分ごとに600クエリに制限しています(IPアドレスごと)。レスポンスを解析する前に、クエリの結果に200番台のステータスコードがあるかを必ず確認してください。HTTPステータスコード429は、レート制限が施行されていることを示します。HTTPステータスコード503は、クエリの結果セットが`arweave.net/graphql`にとって大きすぎることを示すことが一般的です。 + +## リソース +* Arweave GraphQLスキーマのより完全なリストについては、[Arweave GraphQL Guide](https://gql-guide.arweave.dev)を参照してください。 +* [ArDBパッケージ](../guides/querying-arweave/ardb.md) +* [ar-gqlパッケージ](../guides/querying-arweave/ar-gql.md) +* GraphQLに関する一般的なガイドは、[graphql.org/learn](https://graphql.org/learn)が良い出発点です。 \ No newline at end of file diff --git a/docs/src/ja/references/http-api.md b/docs/src/ja/references/http-api.md new file mode 100644 index 0000000..419d0ac --- /dev/null +++ b/docs/src/ja/references/http-api.md @@ -0,0 +1,117 @@ +--- +locale: ja +--- + +# Arweave ピア HTTP API + +Arweave ピア HTTP API のより完全なリファレンスについては、[リンクされたガイド](https://docs.arweave.org/developers/server/http-api)を参照してください。 + +ここに示されているエンドポイントは、便利さのため、または[リンクされたガイド](https://docs.arweave.org/developers/server/http-api)から省略されたために提示されています。 + +::: info +Permaweb ゲートウェイサービスは、通常、1つ以上の完全な Arweave ノードによってバックされています。その結果、ノードエンドポイントが `/tx/` パスの下で公開され、リクエストが直接 Arweave ノードにルーティングされることがよくあります。これは、これらのメソッドがゲートウェイ上でも、Arweave ピア/ノード上でも呼び出すことができることを意味します。 +::: + +
+ +### フィールドによる取得 +トランザクションに関連するヘッダーフィールドを直接 Arweave ノードから取得します。ノードがチャンクを保存していて、データがノードによって提供されるのに十分小さい場合は、トランザクションデータを取得するためにも使用できます。 + +`https://arweave.net/tx/TX_ID/FIELD` + +利用可能なフィールド: id | last_tx | owner | target | quantity | data | reward | signature + +```js +const result = await fetch('https://arweave.net/tx/sHqUBKFeS42-CMCvNqPR31yEP63qSJG3ImshfwzJJF8/data') +// fields are returned in base64url format, so we need to decode +const base64url = await result.text() +const jsonData = JSON.parse( Arweave.utils.b64UrlToString(base64url) ) +console.log(jsonData) +``` + +
+Click to view example result + +```json +{ + "ticker":"ANT-PENDING", + "name":"pending", + "owner":"NlNd_PcajvxAkOweo7rZHJKiIJ7vW1WXt9vb6CzGmC0", + "controller":"NlNd_PcajvxAkOweo7rZHJKiIJ7vW1WXt9vb6CzGmC0", + "evolve":null, + "records": { + "@":"As-g0fqvO_ALZpSI8yKfCZaFtnmuwWasY83BQ520Duw" + }, + "balances":{"NlNd_PcajvxAkOweo7rZHJKiIJ7vW1WXt9vb6CzGmC0":1} +} +``` +
+
+ +### ウォレット残高の取得 +返される残高はウィンストン(Winston)単位です。$ARでの残高を取得するには、残高を1000000000000で割ってください。 +`https://arweave.net/wallet/ADDRESS/balance` + +```js +const res = await axios.get(`https://arweave.net/wallet/NlNd_PcajvxAkOweo7rZHJKiIJ7vW1WXt9vb6CzGmC0/balance`) +console.log(res) +console.log(res.data / 1000000000000) + +6638463438702 // Winston +6.638463438702 // $AR +``` +
+ +### トランザクションのステータス取得 +`https://arweave.net/tx/TX_ID/status` +::: tip +このエンドポイントは、バンドルされたトランザクションではなく、基本的な Arweave トランザクションのみをサポートしています。トランザクションのステータスが利用可能になる前に、オンチェーンで確認される必要があります。 +::: + +```js + const response = await fetch('https://arweave.net/tx/EiRSQExb5HvSynpn0S7_dDnwcws1AJMxoYx4x7nWoho/status') + const result = await response.json() + console.log(JSON.stringify(result)) +``` +
+Click to view example result + +```json +{ + "block_height":1095552,"block_indep_hash":"hyhLEyOw5WcIhZxq-tlnxhnEFgKChKHFrMoUdgIg2Sw0WoBMbdx6uSJKjxnQWon3","number_of_confirmations":10669 +} + +``` +
+
+ + + +### ネットワーク情報の取得 + +```js +const res = await axios.get('https://arweave.net/info') +console.log(res.data) +``` + +
+Click to view example result + +```json +{ + "network": "arweave.N.1", + "version": 5, + "release": 53, + "height": 1106211, + "current": "bqPU_7t-TdRIxgsja0ftgEMNnlGL6OX621LPJJzYP12w-uB_PN4F7qRYD-DpIuRu", + "blocks": 1092577, + "peers": 13922, + "queue_length": 0, + "node_state_latency": 0 +} + +``` +
+
+ +