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?

Scripts

Last updated at Posted at 2024-12-07

Previous << Proving Ownership of a Flow Account
Next >> Transactions

スクリプトは、Flowブロックチェーン上で非永続的なCadenceスクリプトを実行できます。スクリプトはデータを返すことができます。

スクリプトは、常にaccess(all) fun main()関数をエントリーポイントとする必要があります。

fcl.queryは、Cadence scriptsをブロックチェーンに送信し、デコードされたレスポンスを受けとる関数です。

query関数に送信されるオブジェクト内のcadenceのキーは、Cadenceコードを渡すことができるJavaScript Tagged Template Literalです。

Sending your first Script

次のコードでは、Flowブロックチェーンにスクリプトを送信します。このスクリプトは2つの数値を足し算し、その結果を返します。

import * as fcl from "@onflow/fcl"

const response = await fcl.query({
  cadence: `
    access(all) fun main(): Int {
      return 1 + 2
    }
  `
})

console.log(response) // 3

A more complicated Script

ResourceStructのようなものは、Cadenceではかなり一般的です。
次のコード・スニペットでは、スクリプトがPointというStructを定義し、そのリストを返します。

JavaScriptでStructに最も近いものはobjectです。この場合、このレスポンスをデコードすると、オブジェクトの配列が返されることが期待されます。オブジェクトにはxおよびyの値があります。

import * as fcl from "@onflow/fcl"

const response = await fcl.query({
  cadence: `
    access(all) struct Point {
      access(all) var x: Int
      access(all) var y: Int

      init(x: Int, y: Int) {
        self.x = x
        self.y = y
      }
    }

    access(all) fun main(): [Point] {
      return [Point(x: 1, y: 1), Point(x: 2, y: 2)]
    }
  `
})

console.log(response)
/* [{x:1, y:1}, {x:2, y:2}] */

Transforming the data we get back with custom decoders.

私たちのdappでは、おそらくこれらCadenceの値を内部で表現する方法を持っているでしょう。上記の例では、それはPointクラスに該当するかもしれません。

FCLにより、私たちはカスタムデコーダーを提供することが可能であり、エッジでFlowブロックチェーンから受け取ったデータを、dappがそれを見る前に変換することができます。

私たちはこれらのカスタムデコーダーを、FCLの設定で追加します。これにより、dappの起動時に一度設定するだけで、dappの残りの部分では正規化されたデータを使用することができます。

以下の例では、Pointの概念を再び使用します。しかし今回は、カスタムデコーダーを追加し、fcl.decodeがそれをカスタムJavaScriptの Point classに変換できるようにします。

import * as fcl from "@onflow/fcl"

class Point {
  constructor({ x, y }) {
    this.x = x
    this.y = y
  }
}

fcl.config()
  .put("decoder.Point", point => new Point(point))
  /* この部分がobjectをclassに変換しています */

const response = await fcl.query({
  cadence: `
    access(all) struct Point {
      access(all) var x: Int
      access(all) var y: Int

      init(x: Int, y: Int) {
        self.x = x
        self.y = y
      }
    }

    access(all) fun main(): [Point] {
      return [Point(x: 1, y: 1), Point(x: 2, y: 2)]
    }
  `
})

console.log(response)
/* [Point{x:1, y:1}, Point{x:2, y:2}] */

To learn more about query, check out the API documentation.

Last updated on Nov 21, 2024 by Jordan Ribbink

翻訳元


Previous << Proving Ownership of a Flow Account

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

Next >> Transactions

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?