0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Paths

Last updated at Posted at 2024-10-25

アカウントストレージは、path(以下パスと記します)配下にオブジェクトを格納します。パスはドメインと識別子で構成されます。

パスは文字/で始まり、ドメイン、パス区切り文字の/、最後に識別子が続きます。識別子は文字で始まり、文字、数字、またはアンダースコア_のみが続きます。例えば、パス/storage/testはドメインがstorage、識別子がtestです。

有効なドメインは2つあります。storagepublicです。

storageドメインのパスは型が StoragePathであり、publicドメインのパスは型がPublicPathです。StoragePathおよびPublicPathは、いずれもPath型のサブタイプです。

storageドメインは、リソースや構造体など保存可能なオブジェクトを格納します。 storageドメインに格納されたオブジェクトは、Storage権限(Entitlement)で承認されたアカウント参照のみアクセスができます。

publicドメインには、誰でもアクセス可能な機能群(capability)を格納します。

Path functions

fun toString(): String

パスの文字列を返します。

let storagePath = /storage/path

storagePath.toString()  // is "/storage/path"

文字列からパスを生成するユーティリティもあります。

fun PublicPath(identifier: string): PublicPath?
fun StoragePath(identifier: string): StoragePath?

これらの各関数は識別子を受け取って、適切なドメインのパスを生成します。

let pathID = "foo"
let path = PublicPath(identifier: pathID) // is /public/foo

(補足: 短いですが、これが非常に大事な機能です。Flow Blockchainではまずスマートコントラクトでリソースを生成します。それをこのstorageドメインに保存します。但し、リソースは非常に大事であるため、リソースから何かを取り出す時以外は直接storageドメインにアクセスしません。代わりにpublicドメインにスマートコントラクトのfunctionを呼び出すためのCapabilityを保存します。publicと付いていますが、Capabilityはリソースオブジェクトのfunctionの集合ですのでそのリソースの持ち主でないと書き換えが出来ないようになっています。

直感的にトランザクションを実行できるのがこのPathのおかげです。リソースをスマートコントラクトで生成した後、storageのパスに保存し、そのリソース内にある関数を機能を絞ってpublicパスの配下におきます。これで直感的にpublicパスの中から呼び出したいリソース関数を呼び出せます。リソースの機能群を絞るにはインターフェースを使います。Capabilityを作る時にこのインターフェースをあてる事でそのインターフェースに設定した関数しか呼び出せなくなります。詳しくはCapabilitiesのページを参照下さい。)

翻訳元->https://cadence-lang.org/docs/language/accounts/paths

Flow BlockchainのCadence version1.0ドキュメント (Paths)

Previous << Accounts

Next >> Storage

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?