Previous << Scripts
Next >> Signing and Verifying Arbitrary Data
トランザクションにより、FlowブロックチェーンにCadenceコードを送信して、その状態を恒久的に変更することができます。
トランザクションはスクリプトの一種ですが、より多くの要件があるため、ここの前にスクリプトのドキュメントをお読みいただいたものとします。
query
はチェーンにスクリプトを送信するために使用されますが、mutate
はトランザクションを構築して送信するために使用されます。スクリプトと同様に、fcl.mutate
はCadenceコードを渡すことができるJavaScript Tagged Template Literalです。
スクリプトとは異なり、提案者、承認者、支払者などの追加情報を必要とします。そのため、少し混乱するかもしれません。
Sending your first Transaction
以下のコード・スニペットには、多くの内容が含まれています。これは、トランザクションをFlowブロックチェーンに送信します。このトランザクションでは、現在のユーザーがproposer
およびpayer
として承認しています。Flowに特有の点として、トランザクションの支払者は、必ずしもトランザクションの実行者である必要はありません。ProposersとPayersは、トランザクションに必ず必要な特別な種類の承認処理です。proposer
は、Ethereum トランザクションにおける nonce
と類似した動作をし、繰り返し攻撃を防止するのに役立ちます。payer
は、トランザクション料の支払者となります。これらの設定がない場合、FCL はすべてのロールに対し現在のユーザーを使うデフォルト設定をします。
fcl.mutate
は transactionId
を返します。私たちはこのレスポンスを直接 fcl.tx
に渡し、そしてonceSealed
メソッドを使用することで、トランザクションがsealedになったときにそのpromiseがresolveされることを確認できます。
import * as fcl from "@onflow/fcl"
const transactionId = await fcl.mutate({
cadence: `
transaction {
execute {
log("Hello from execute")
}
}
`,
proposer: fcl.currentUser,
payer: fcl.currentUser,
limit: 50
})
const transaction = await fcl.tx(transactionId).onceSealed()
console.log(transaction)
/* The transactions status and events after being sealed */
Authorizing a transaction
以下のコード・スニペットは、1つの非常に重要な違いを除いて、上記のものと同一です。今回のCadenceコードにはprepareステートメントがあり、トランザクションを構築する際にfcl.currentUser
を使用しています。
prepare
ステートメントの引数は、authorizations
配列の中のauthorizationsの順番に直接対応しています。4つのauthorizationsは、prepare
に渡される引数として4つの&Account
を持つことを意味します。しかし、この場合、引数は1つだけで、それはcurrentUser
です。
これらのauthorizationsは重要です。なぜなら、アカウントのauthorizationを持っている場合のみ、アカウントのストレージにアクセス/変更を行うことができるからです。
import * as fcl from "@onflow/fcl"
const transactionId = await fcl.mutate({
cadence: `
transaction {
prepare(acct: &Account) {
log("Hello from prepare")
}
execute {
log("Hello from execute")
}
}
`,
proposer: fcl.currentUser,
payer: fcl.currentUser,
authorizations: [fcl.currentUser],
limit: 50
})
const transaction = await fcl.tx(transactionId).onceSealed()
console.log(transaction)
/* The transactions status and events after being sealed */
To learn more about mutate
, check out the API documentation.
Last updated on Nov 21, 2024 by Jordan Ribbink
翻訳元
Flow BlockchainのCadence version1.0ドキュメント (Transactions)