アカウントストレージは、path(以下パスと記します)配下にオブジェクトを格納します。パスはドメインと識別子で構成されます。
パスは文字/
で始まり、ドメイン、パス区切り文字の/
、最後に識別子が続きます。識別子は文字で始まり、文字、数字、またはアンダースコア_
のみが続きます。例えば、パス/storage/test
はドメインがstorage、識別子がtestです。
有効なドメインは2つあります。storage
とpublic
です。
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