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
ResourceやStructのようなものは、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)