Previous << Flow Client Library (FCL)
Next >> FCL SDK Reference
For release updates, see the repo
Configuration(設定)
FCLには、FCLのさまざまな側面(aspect)を設定できる仕組みがあります。Flow Blockchainのインスタンスを(ローカルのエミュレーターからテストネット、メインネットへと)移動させる時、あなたが必要なFCLの実装はコンフィグレーションだけで済みます。
Setting Configuration Values
値の設定は一度だけ行います。この設定はできるだけ早い段階に行うのがお勧めです。 設定値をセットするには、config
インスタンス上でput
メソッドを呼び出す必要があります。put
メソッドはconfig
インスタンスを返しますので、チェイニングができます。
または、JSONオブジェクトを直接渡してコンフィグをセットすることもできます。
import * as fcl from '@onflow/fcl';
fcl
/* returns the config instance */
.config()
/* configures "foo" to be "bar" */
.put('foo', 'bar')
/* configures "baz" to be "buz" */
.put('baz', 'buz');
/* OR */
fcl.config({
foo: 'bar',
baz: 'buz',
});
Getting Configuration Values
config
インスタンスには非同期のget
メソッドがあり、設定値を取得できます。また、フォールバック値も渡すことができます。
import * as fcl from '@onflow/fcl';
fcl.config().put('foo', 'bar').put('woot', 5).put('rawr', 7);
const FALLBACK = 1;
async function addStuff() {
var woot = await fcl.config().get('woot', FALLBACK); /* will be 5 -- set in the config before */
var rawr = await fcl.config().get('rawr', FALLBACK); /* will be 7 -- set in the config before */
var hmmm = await fcl.config().get('hmmm', FALLBACK); /* will be 1 -- uses fallback because this isnt in the config */
return woot + rawr + hmmm;
}
addStuff().then((d) => console.log(d)); /* 13 (5 + 7 + 1) */
Common Configuration Keys
Name | Example | Description |
---|---|---|
accessNode.api (required)
|
https://rest-testnet.onflow.org |
Flow Blockchainの通信したいAccess NodeのAPI URL。利用可能なすべてのアクセスノードのエンドポイントはこちらでご確認ください。 |
app.detail.title |
Cryptokitties |
アプリケーションのタイトルは、ウォレットやその他のサービスから要求されることがあります。WalletConnectプラグインとWallet Discoveryサービスで使用されています。 |
app.detail.icon |
https://fcl-discovery.onflow.org/images/blocto.png |
あなたのアプリケーションのアイコンURLは、ウォレットやその他サービスから要求されます。WalletConnectプラグインとWallet Discoveryサービスで使用されています。 |
app.detail.description |
Cryptokitties is a blockchain game |
あなたのアプリケーションの説明は、ウォレットやその他サービスから要求されます。WalletConnectプラグインとWallet Discoveryサービスで使用されています。 |
app.detail.url |
https://cryptokitties.co |
あなたのアプリケーションURLは、ウォレットやその他サービスから要求されます。WalletConnectプラグインとウWallet Discoveryサービスで使用されています。 |
challenge.handshake |
DEPRECATED | 代わりにdiscovery.wallet を使用してください。 |
discovery.authn.endpoint |
https://fcl-discovery.onflow.org/api/testnet/authn |
設定可能な代替Wallet Discoveryメカニズムのエンドポイント。詳細については、discoveryをご覧ください。 |
discovery.wallet (required)
|
https://fcl-discovery.onflow.org/testnet/authn |
FCLにウォレットまたはWallet Discoveryメカニズムを指定します。 |
discovery.wallet.method |
IFRAME/RPC , POP/RPC , TAB/RPC , HTTP/POST , or EXT/RPC
|
どの戦略(タブ、ポップアップ、iFrame)でウォレットを見せるかを指定します |
fcl.limit |
100 |
トランザクションで指定されていない場合のfallbackとしてcompute limitを指定します。整数で指定します。 |
flow.network (recommended)
|
testnet |
接続するネットワーク及び、testnet およびmainnet のFCLCryptoContractのアドレス提供に使用します。指定可能な値:local 、testnet 、mainnet 。 |
walletconnect.projectId |
YOUR_PROJECT_ID |
あなたのアプリである WalletConnect のプロジェクトID。 アプリケーションのプロジェクトIDを取得するには、WalletConnect Cloudを参照してください。 |
Using Contracts in Scripts and Transactions(エイリアス作成)
Address Replacement
コンフィグレーションの0x
で始まるキーはFCLのスクリプトおよびトランザクション内で置き換えられます。これにより、アプリケーションをFlow Blockchainの異なるインスタンスに向けた場合でも、1箇所変更するのみで、スクリプトまたはトランザクションのCadenceコードを変更する必要がなくなります。
import * as fcl from '@onflow/fcl';
fcl.config().put('0xFungibleToken', '0xf233dcee88fe0abe');
async function myScript() {
return fcl
.send([
fcl.script`
import FungibleToken from 0xFungibleToken // will be replaced with 0xf233dcee88fe0abe because of the configuration
access(all) fun main() { /* Rest of the script goes here */ }
`,
])
.then(fcl.decode);
}
async function myTransaction() {
return fcl
.send([
fcl.transaction`
import FungibleToken from 0xFungibleToken // will be replaced with 0xf233dcee88fe0abe because of the configuration
transaction { /* Rest of the transaction goes here */ }
`,
])
.then(fcl.decode);
}
Example
import * as fcl from '@onflow/fcl';
fcl
.config()
.put('flow.network', 'testnet')
.put('walletconnect.projectId', 'YOUR_PROJECT_ID')
.put('accessNode.api', 'https://rest-testnet.onflow.org')
.put('discovery.wallet', 'https://fcl-discovery.onflow.org/testnet/authn')
.put('app.detail.title', 'Test Harness')
.put('app.detail.icon', 'https://i.imgur.com/r23Zhvu.png')
.put('app.detail.description', 'A test harness for FCL')
.put('app.detail.url', 'https://myapp.com')
.put('service.OpenID.scopes', 'email email_verified name zoneinfo')
.put('0xFlowToken', '0x7e60df042a9c0868');
Using Flow.json
よりシンプルに、より柔軟にスマートコントラクトのインポートをスクリプトやトランザクションの中で行う方法は、FCLのconfig.load
メソッドを使用する方法です。これは、コントラクトの設定をflow.json
ファイルから読み込み、あなたのimportシンタックスをクリーンかつ、FCLが、違うネットワークでも正しいコントラクトのアドレスを使う事ができるようにします。
Setting Up
1. Define Your Contracts in flow.json
以下は複数のネットワークのエイリアスを持つflow.json
ファイルの例です。
{
"contracts": {
"HelloWorld": {
"source": "./cadence/contracts/HelloWorld.cdc",
"aliases": {
"testnet": "0x1cf0e2f2f715450",
"mainnet": "0xf8d6e0586b0a20c7"
}
}
}
}
- source: Points to the contract file in your project.
- aliases: Maps each network to the correct contract address.
2. Configure FCL
flow.json
ファイルを読み込み、FCLで使えるように設定する。
import { config } from '@onflow/fcl';
import flowJSON from '../flow.json';
config({
'flow.network': 'testnet', /* Choose your network, e.g., testnet or mainnet */
'accessNode.api': 'https://rest-testnet.onflow.org', /* Access node for the network */
'discovery.wallet': `https://fcl-discovery.onflow.org/testnet/authn`, /* Wallet discovery */
}).load({ flowJSON });
この設定により、FCLは選択されたネットワーク(testnet
やmainnet
など)に基づいて、自動的に正しいコントラクトアドレスを使用します。
3. Use Contract Names in Scripts and Transactions
flow.json
の設定が完了したら、Cadenceスクリプトまたはトランザクションで、名前だけでスマートコントラクトをインポートすることができます。
import "HelloWorld"
access(all) fun main(): String {
return HelloWorld.sayHello()
}
FCLは"HelloWorld"
をflow.json
の設定から正しいアドレスに置き換えます。
Note:秘密鍵を
flow.json
に保存するのはやめてください。代わりに、key/location syntaxを使用して、機密性の高いキーを別の.gitignore
で保護されたファイルに保管します。
Wallet Interactions(サインイン,サイン)
これらのメソッドは、ユーザーを認証したり、ユーザーのトランザクションを承認するために、dappsがFCL対応のウォレットとやりとりできるようにします。
⚠️These methods are async.
authenticate
⚠️This method can only be used in web browsers.
このメソッドを呼び出すと、FCLをサポートするウォレットを介して現在のユーザーが認証処理をします。一度実行されると、FCLは設定されたdiscovery.wallet
エンドポイントと通信を行い、ユーザーに認証に使用するウォレットを選択させます。ウォレットプロバイダーがユーザーを認証すると、FCLは今後のその使用や認証のためにcurrent userオブジェクトに値をセットします。
Note
⚠️discovery.wallet
の値はこのメソッドが呼び出される前にconfigurationにセットされてなくてはなりません。FCL Configurationの項目をご覧ください。
📣 デフォルトのdiscovery endpointは、ユーザーが対応するウォレットを選択できるように、iframeオーバーレイを開きます。
Usage
import * as fcl from '@onflow/fcl';
fcl
.config()
.put('accessNode.api', 'https://rest-testnet.onflow.org')
.put('discovery.wallet', 'https://fcl-discovery.onflow.org/testnet/authn');
/* anywhere on the page */
fcl.authenticate();
Note
⚠️ authenticate
は、discovery から返されたサービスをfcl.authenticate({ service })
を使うことにより受け取ることもできます。
unauthenticate
⚠️This method can only be used in web browsers.
現在のユーザーをログアウトさせ、current userオブジェクトの値にnullにセットします。
Note
⚠️current userは先に認証されていなければなりません。
Usage
import * as fcl from '@onflow/fcl';
fcl.config().put('accessNode.api', 'https://rest-testnet.onflow.org');
/* first authenticate to set current user */
fcl.authenticate();
/* ... somewhere else & sometime later */
fcl.unauthenticate();
/* fcl.currentUser.loggedIn === null */
reauthenticate
⚠️This method can only be used in web browsers.
current userに対して、先にfcl.unauthenticate()
を呼び出し、再度fcl.authenticate()
を呼び出す処理を簡便にした方法です。
Note
⚠️current userは先に認証されていなければなりません。
Usage
import * as fcl from '@onflow/fcl';
/* first authenticate to set current user */
fcl.authenticate();
/* ... somewhere else & sometime later */
fcl.reauthenticate();
/* logs out user and opens up login|sign-up flow */
signUp
⚠️This method can only be used in web browsers.
fcl.authenticate()
と同等の便利メソッド
logIn
⚠️This method can only be used in web browsers.
fcl.authenticate()
と同等の便利メソッド
authz
現在のユーザー(current user)がトランザクションを Flow に送信するために必要な認証情報を生成してくれる簡便メソッド。これは、ユーザーのウォレットプロバイダーに接続し、トランザクションを送信するために必要な、署名を生成する署名関数を定義しています。
📣 必要に応じて、この関数をあなたのauthorization functionに置き換えることができます。
Returns
Type | Description |
---|---|
AuthorizationObject | トランザクションをいずれかのロールで承認するためにcurrent userから取り出した、必要な情報を含むオブジェクト。 |
Usage
Note: proposer
、payer
、authorizations
のデフォルト値はすでにfcl.authz
であるため、これらのパラメータを含める必要はありません。これは例としてのみ表示しています。詳しくは署名の役割をご覧ください。
import * as fcl from '@onflow/fcl';
/* login somewhere before */
fcl.authenticate();
/* once logged in authz will produce values */
console.log(fcl.authz);
/* prints {addr, signingFunction, keyId, sequenceNum} from the current authenticated user. */
const txId = await fcl.mutate({
cadence: `
import Profile from 0xba1132bc08f82fe2
transaction(name: String) {
prepare(account: auth(BorrowValue) &Account) {
account.storage.borrow<&{Profile.Owner}>(from: Profile.privatePath)!.setName(name)
}
}
`,
args: (arg, t) => [arg('myName', t.String)],
proposer: fcl.authz, /* optional - default is fcl.authz */
payer: fcl.authz, /* optional - default is fcl.authz */
authorizations: [fcl.authz], /* optional - default is [fcl.authz] */
});
Current User(現在のユーザ)
セットされていれば、現在のユーザー(current user)を保持し、ユーザー認証とユーザーによる承認を管理するための一連の関数を提供します。
⚠️The following methods can only be used in web browsers.
currentUser.subscribe
subscribeに渡されるコールバックは、ユーザーが認証および認証解除を行う時に呼び出されるため、それに従ってUIを簡単に更新することができます。
Arguments
Name | Type | Description |
---|---|---|
callback |
function | コールバックはcurrent userを最初の引数としてcurrent userがセットまたは取り除かれた時に呼び出されます。 |
Usage
import React, { useState, useEffect } from 'react';
import * as fcl from '@onflow/fcl';
export function AuthCluster() {
const [user, setUser] = useState({ loggedIn: null });
useEffect(() => fcl.currentUser.subscribe(setUser), []); /* sets the callback for FCL to use */
if (user.loggedIn) {
return (
<div>
<span>{user?.addr ?? 'No Address'}</span>
<button onClick={fcl.unauthenticate}>Log Out</button> {/* once logged out in setUser(user) will be called */}
</div>
);
} else {
return (
<div>
<button onClick={fcl.logIn}>Log In</button>{' '}
{/* once logged in setUser(user) will be called */}
{/* once signed up, setUser(user) will be called */}
<button onClick={fcl.signUp}>Sign Up</button>
</div>
);
}
}
currentUser.snapshot
current userオブジェクトを返します。これは、fcl.currentUser.subscribe(callback)
でセットされ利用可能なオブジェクトと同じものです。
Usage
/* returns the current user object */
const user = fcl.currentUser.snapshot();
/* subscribes to the current user object and logs to console on changes */
fcl.currentUser.subscribe(console.log);
currentUser.authenticate
fcl.authenticate
と同等です。
currentUser.unauthenticate
fcl.unauthenticate
と同等です。
currentUser.authorization
fcl.authz
と同等です。
currentUser.signUserMessage
FCL対応のウォレット/サービス経由でユーザーが自ら署名できるメソッドです。
⚠️ このメソッドは、current user(現在のユーザー)のウォレットがsigning service endpoint(署名サービスエンドポイント)をサポートしている必要があります。現時点で、Bloctoのみこの機能にデフォルトで対応しています。
Arguments
Name | Type | Description |
---|---|---|
message |
string (required) | A hexadecimal string to be signed |
Returns
Type | Description |
---|---|
Array |
An Array of CompositeSignatures: signature |
Usage
import * as fcl from '@onflow/fcl';
export const signMessage = async () => {
const MSG = Buffer.from('FOO').toString('hex');
try {
return await currentUser.signUserMessage(MSG);
} catch (error) {
console.log(error);
}
};
Discovery(3rdPartyウォレット)
discovery
ディスカバリーはコードを抽象化しているため、開発者はFlow対応のウォレットの発見やインテグレーション、認証等をコードで行う必要がありません。FCLのdiscovery
を使うことで、dappsはUIを完全に制御しつつ、ウォレットをリストし、認証を行うことができます。これによる一般的なユースケースは、ログイン画面や登録画面です。
(あるいは、UIの制御が必要のない場合は、discovery.wallet
設定値をそのまま使用することもできます。これは、クイックスタートで説明されている最もシンプルな構成です。)
⚠️The following methods can only be used in web browsers.
Note
⚠️discovery.authn.endpoint
の値はこのメソッドを呼び出す前にconfigurationで設定されている必要があります。FCL Configurationを参照してください。
Suggested Configuration
Environment | Example |
---|---|
Mainnet | https://fcl-discovery.onflow.org/api/authn |
Testnet | https://fcl-discovery.onflow.org/api/testnet/authn |
If the Discovery endpoint is set in config, then you can iterate through authn services and pass the chosen service to authenticate to authenticate a user.
Usage
import './config';
import { useState, useEffect } from 'react';
import * as fcl from '@onflow/fcl';
function Component() {
const [wallets, setWallets] = useState([]);
useEffect(
() => fcl.discovery.authn.subscribe((res) => setWallets(res.results)),
[],
);
return (
<div>
{wallets.map((wallet) => (
<button
key={wallet.provider.address}
onClick={() => fcl.authenticate({ service: wallet })}
>
Login with {wallet.provider.name}
</button>
))}
</div>
);
}
authn
More Configuration
デフォルトでは、LedgerやDapper Walletのような限定的な機能のサービスもしくは開発者による登録を必要とするサービスは、アプリ上でユーザーに表示する為には追加設定(opt-in)をする必要があります。 アプリケーションでオプトインのウォレットをユーザーに対して有効にするには、設定内でdiscovery.authn.include
プロパティを使用し、ユーザーに表示したいオプトインのウォレットを配列で設定します。
import { config } from '@onflow/fcl';
config({
'discovery.authn.endpoint':
'https://fcl-discovery.onflow.org/api/testnet/authn', /* Endpoint set to Testnet */
'discovery.authn.include': ['0x9d2e44203cb13051'], /* Ledger wallet address on Testnet set to be included */
});
Opt-In Wallet Addresses on Testnet and Mainnet
Service | Testnet | Mainnet |
---|---|---|
Dapper Wallet |
0x82ec283f88a62e65 | 0xead892083b3e2c6c |
Ledger |
0x9d2e44203cb13051 | 0xe5cd26afebe62781 |
ウォレットに関するより詳しい情報は、こちらのservice listを見てください。
discovery.authn.snapshot()
authn
services のリストを返します。
discovery.authn.subscribe(callback)
subscribe
にセットされたコールバック関数が、authn
servicesのリストと一緒に呼ばれます。
On-chain Interactions(トランザクション)
📣 These methods can be used in browsers and NodeJS. (ブラウザ、Node.jsどちらでも使えます)
これらのメソッドによりdappsは、Access Node APIを使用した一連の関数を介して、Flowブロックチェーンと直接やりとりすることが可能になります。
Query and Mutate Flow with Cadence
ブロックチェーン上で任意のCadenceスクリプトを実行したい場合、これらのメソッドは、ブロックチェーンとのやりとりを生成し、送信し、デコードする必要がなく、これを実行する便利な方法を提供します。
query(スクリプト)
ブロックチェーンを照会する(query)ためのスクリプトを送信できます。
Options
以下キーを持つ一つのオブジェクトとして、下記コードのように渡します。特に記載のない限り、すべてのキーはオプションです。
Key | Type | Description |
---|---|---|
cadence |
string (required) | A valid cadence script. |
args |
ArgumentFunction | Any arguments to the script if needed should be supplied via a function that returns an array of arguments. |
limit |
number | クエリに対する計算(ガス)リミット。Flowでの計算コストの算出方法については、計算コストに関するドキュメントを参照してください。 |
Returns
Type | Description |
---|---|
any | A JSON representation of the response. |
Usage
import * as fcl from '@onflow/fcl';
const result = await fcl.query({
cadence: `
access(all) fun main(a: Int, b: Int, addr: Address): Int {
log(addr)
return a + b
}
`,
args: (arg, t) => [
arg(7, t.Int), /* a: Int */
arg(6, t.Int), /* b: Int */
arg('0xba1132bc08f82fe2', t.Address), /* addr: Address */
],
});
console.log(result); /* 13 */
Examples
mutate(トランザクション)
ブロックチェーンにトランザクションを送信し、状態(state)を変更することができます。
⚠️ブラウザで使用する場合、fcl.mutate
は組み込みのfcl.authz
関数を使用して、current userの署名を生成します。このメソッドをNode.jsから呼び出す場合は、あなたは独自のカスタム署名関数を指定する必要があります。
Options
以下キーを持つ一つのオブジェクトとして、下記コードのように渡します。特に記載のない限り、すべてのキーはオプションです。
Key | Type | Description |
---|---|---|
cadence |
string (required) | A valid cadence transaction. |
args |
ArgumentFunction | Any arguments to the script if needed should be supplied via a function that returns an array of arguments. |
limit |
number | クエリに対する計算(ガス)リミット。Flowでの計算コストの算出方法については、計算コストに関するドキュメントを参照してください。 |
proposer |
AuthorizationFunction | The authorization function that returns a valid AuthorizationObject for the proposer role. |
Returns
Type | Description |
---|---|
string | トランザクションID |
Usage
import * as fcl from '@onflow/fcl';
/* login somewhere before */
fcl.authenticate();
const txId = await fcl.mutate({
cadence: `
import Profile from 0xba1132bc08f82fe2
transaction(name: String) {
prepare(account: auth(BorrowValue) &Account) {
account.storage.borrow<&{Profile.Owner}>(from: Profile.privatePath)!.setName(name)
}
}
`,
args: (arg, t) => [arg('myName', t.String)],
});
Examples
verifyUserSignatures (Deprecated)
fcl.AppUtils.verifyUserSignatures
を使用してください。
AppUtils(ノンカストディアル)
AppUtils.verifyUserSignatures
ユーザーの秘密鍵によって署名されたメッセージを暗号学的に検証することができるメソッド。これは通常、currentUser.signUserMessage
からの応答とともに使用されます。
Note
⚠️ このAPIを使用するには、fcl.config.flow.network
かオプションのオーバーライドが必要です。FCL Configuration(のflow.network
)を参照してください。
Arguments
Name | Type | Description |
---|---|---|
message |
string (required) | A hexadecimal string |
compositeSignatures |
Array (required) | An Array of CompositeSignatures
|
opts |
Object (optional) | opts.fclCryptoContract を指定すると、ローカル開発用の FCLCryptoContract アドレスを上書きできます。 |
Returns
Type | Description |
---|---|
Boolean |
true if verified or false
|
Usage
import * as fcl from '@onflow/fcl';
const isValid = await fcl.AppUtils.verifyUserSignatures(
Buffer.from('FOO').toString('hex'),
[
{
f_type: 'CompositeSignature',
f_vsn: '1.0.0',
addr: '0x123',
keyId: 0,
signature: 'abc123',
},
],
{ fclCryptoContract },
);
Examples
AppUtils.verifyAccountProof
このメソッドはアプリケーションが、ユーザーがオンチェーンアカウントを管理していることを暗号学的に証明できます。ユーザーが認証する際、FCLのaccount-proof
サービスをサポートすることを、いくつかのFCL対応ウォレットは選びます。もしウォレットがこのサービスをサポートすることを選択し、ユーザーがデータの署名を承認した場合、account-proof
データと、ユーザーがオンチェーンアカウントを管理している(control)ことを証明する署名が返されます。詳細は、proving-authenticationのドキュメントを参照してください。
⚠️ このAPIを使用するには、fcl.config.flow.network
かオプションのオーバーライドが必要です。FCL Configuration(のflow.network
)を参照してください。
Arguments
Name | Type | Description |
---|---|---|
appIdentifier |
string (required) | A hexadecimal string |
accountProofData |
Object (required) | Object with properties: address : string - A Flow account address. nonce : string - A random string in hexadecimal format (minimum 32 bytes in total, i.e 64 hex characters) signatures : Object[] - An array of composite signatures to verify |
opts |
Object (optional) | opts.fclCryptoContract を指定すると、ローカル開発用の FCLCryptoContract アドレスを上書きできます。 |
Returns
Type | Description |
---|---|
Boolean |
true if verified or false
|
Usage
import * as fcl from "@onflow/fcl"
const accountProofData = {
address: "0x123",
nonce: "F0123"
signatures: [{f_type: "CompositeSignature", f_vsn: "1.0.0", addr: "0x123", keyId: 0, signature: "abc123"}],
}
const isValid = await fcl.AppUtils.verifyAccountProof(
"AwesomeAppId",
accountProofData,
{fclCryptoContract}
)
Examples
Query and mutate the blockchain with Builders
いくつかのケースでは、あなたはfcl.query
や、 fcl.mutate
インターフェイスが提供するものよりも、より複雑なインタラクションを構築したいと思うかもしれません。これを行うために、ビルダーを組み合わせてインタラクションを構築し、それを認証し、ブロックチェーンに送信するパターンをFCLは使用します。
⚠【推奨】 これらのビルダーの使用が必要な特定のユースケースがない限り、
fcl.query({...options}
またはfcl.mutate({...options})
でほとんどのケースに対応できるはずです。
send
任意のスクリプト、トランザクション、リクエストを Flow に対して送信します。
このメソッドは、ビルダーの配列を消費して、認証して送信します。配列に含める必要のあるビルダーは、構築するやりとり(interaction)によります。
Note
⚠️正しいキーとすべての値をJSONから取得するには、
fcl.decode(response)
と併用する必要があります。
Arguments
Name | Type | Description |
---|---|---|
builders |
[Builders] | See builder functions. |
Returns
Type | Description |
---|---|
ResponseObject | チェーンから返されたデータを含むオブジェクト。常にfcl.decode() で、適切なJSONキーと値を取得するためにデコードする必要があります。 |
Usage
import * as fcl from '@onflow/fcl';
/* a script only needs to resolve the arguments to the script */
const response = await fcl.send([fcl.script`${script}`, fcl.args(args)]);
/* note: response values are encoded, call await fcl.decode(response) to get JSON */
/* a transaction requires multiple 'builders' that need to be resolved prior to being sent to the chain - such as setting the authorizations. */
const response = await fcl.send([
fcl.transaction`
${transaction}
`,
fcl.args(args),
fcl.proposer(proposer),
fcl.authorizations(authorizations),
fcl.payer(payer),
fcl.limit(9999),
]);
/* note: response contains several values (Cad) */
decode
fcl.send()
からのレスポンスをデコードし、Cadenceコードから返された値の適切なJSON表現に変換します。
Note
📣 独自のデコーダーを定義するには、tutorial
を参照してください。
Arguments
Name | Type | Description |
---|---|---|
response |
ResponseObject |
fcl.send([...]) から返されるべき応答です。 |
Returns
Type | Description |
---|---|
any | 実行したCadenceコードによる生の文字列応答をJSON表現にしたもの。戻り値は単一の値・型、または複数の型を持つオブジェクトとなります。 |
Usage
import * as fcl from '@onflow/fcl';
/* simple script to add 2 numbers */
const response = await fcl.send([
fcl.script`
access(all) fun main(int1: Int, int2: Int): Int {
return int1 + int2
}
`,
fcl.args([fcl.arg(1, fcl.t.Int), fcl.arg(2, fcl.t.Int)]),
]);
const decoded = await fcl.decode(response);
assert(3 === decoded);
assert(typeof decoded === 'number');
Builders(オンチェーン情報取得)
これらのメソッドは、トランザクションやスクリプトのテンプレートの色々な部分を埋めて、構築、認証、ブロックチェーンに対して送信します。入力済みテンプレートはInteraction(インタラクション)と呼ばれます。
⚠️These methods must be used with fcl.send([...builders]).then(fcl.decode)
Query Builders
getAccount
アドレスをもとにアカウント情報を返します。
⚠️他のビルダーと組み合わせる必要がない場合は、あらかじめ構築されたインタラクションのfcl.account(address)
の使用を検討してください。
Arguments
Name | Type | Description |
---|---|---|
address |
Address | Address of the user account with or without a prefix (both formats are supported). |
Returns after decoding
Type | Description |
---|---|
AccountObject | A JSON representation of a user account. |
Usage
import * as fcl from '@onflow/fcl';
/* somewhere in an async function
fcl.account is the same as this function */
const getAccount = async (address) => {
const account = await fcl.send([fcl.getAccount(address)]).then(fcl.decode);
return account;
};
getBlock
最新(1番高さが高い)のブロック情報を返します。
📣 古いブロック情報を取得する時には、fcl.atBlockId()
やfcl.atBlockHeight()
を併用して使ってください。
⚠️他のビルダーと組み合わせる必要がない場合は、あらかじめ構築されたインタラクションのfcl.getblock(isSealed)
の使用を検討してください。
Arguments
Name | Type | Default | Description |
---|---|---|---|
isSealed |
boolean | false | If the latest block should be sealed or not. See block states. |
Returns after decoding
Type | Description |
---|---|
BlockObject | 他のビルダーと併用しない場合は、最新のブロックです。 |
Usage
import * as fcl from '@onflow/fcl';
const latestSealedBlock = await fcl
.send([
fcl.getBlock(true), /* isSealed = true */
])
.then(fcl.decode);
atBlockHeight
指定したブロック高さのブロックに対する部分情報を返すビルダー関数です。
⚠️fcl.getBlock()
など他のインタラクションと組み合わせて使用すると、指定したブロック高さの完全な情報を取得できます。
Arguments
Name | Type | Description |
---|---|---|
blockHeight |
number | The height of the block to execute the interaction at. |
Returns
Type | Description |
---|---|
Partial Interaction | A partial interaction to be paired with another interaction such as fcl.getBlock() or fcl.getAccount() . |
Usage
import * as fcl from '@onflow/fcl';
await fcl.send([fcl.getBlock(), fcl.atBlockHeight(123)]).then(fcl.decode);
atBlockId
指定したブロックIDのブロックに対する部分情報を返すビルダー関数です。
⚠️fcl.getBlock()
など他のインタラクションと組み合わせて使用すると、指定したブロックIDの完全な情報を取得できます。
Arguments
Name | Type | Description |
---|---|---|
blockId |
string | The ID of the block to execute the interaction at. |
Returns
Type | Description |
---|---|
Partial Interaction | A partial interaction to be paired with another interaction such as fcl.getBlock() or fcl.getAccount() . |
Usage
import * as fcl from '@onflow/fcl';
await fcl.send([fcl.getBlock(), fcl.atBlockHeight(123)]).then(fcl.decode);
getBlockHeader
ブロックのヘッダー情報を返すビルダー関数です。
📣 古いブロック情報を取得するインタラクションを構築する時には、fcl.atBlockId()
やfcl.atBlockHeight()
を併用して使ってください。
Returns after decoding
Type | Description |
---|---|
BlockHeaderObject | 他のビルダーと組み合わせて使用しない場合は最新のブロックヘッダー。 |
Usage
import * as fcl from '@onflow/fcl';
const latestBlockHeader = await fcl
.send([fcl.getBlockHeader()])
.then(fcl.decode);
getEventsAtBlockHeightRange
指定したイベントの、指定したブロック高さ範囲内のすべてのインスタンスを返します。
⚠️指定するブロックの範囲は、現在のスポーク(定期的に行われるCadenceアップグレード)からでなければなりません。
⚠️指定するブロックの範囲は、1リクエストあたり250ブロック以下でなければなりません。
Arguments
Name | Type | Description |
---|---|---|
eventName |
EventName | The name of the event. |
fromBlockHeight |
number | The height of the block to start looking for events (inclusive). |
toBlockHeight |
number | The height of the block to stop looking for events (inclusive). |
Returns after decoding
Type | Description |
---|---|
[EventObject] | An array of events that matched the eventName. |
Usage
import * as fcl from '@onflow/fcl';
const events = await fcl
.send([
fcl.getEventsAtBlockHeightRange(
'A.7e60df042a9c0868.FlowToken.TokensWithdrawn',
35580624,
35580624,
),
])
.then(fcl.decode);
getEventsAtBlockIds
複数のブロックIDで指定されたブロック内で、特定のイベント(名前で指定)のすべてのインスタンスを返します。
⚠️指定するブロックの範囲は、現在のスポーク(定期的に行われるCadenceアップグレードのこと)からでなければなりません。
Arguments
Name | Type | Description |
---|---|---|
eventName |
EventName | The name of the event. |
[blockId ] |
[number] | The ids of the blocks to scan for events. |
Returns after decoding
Type | Description |
---|---|
[EventObject] | An array of events that matched the eventName. |
Usage
import * as fcl from '@onflow/fcl';
const events = await fcl
.send([
fcl.getEventsAtBlockIds('A.7e60df042a9c0868.FlowToken.TokensWithdrawn', [
'c4f239d49e96d1e5fbcf1f31027a6e582e8c03fcd9954177b7723fdb03d938c7',
'5dbaa85922eb194a3dc463c946cc01c866f2ff2b88f3e59e21c0d8d00113273f',
]),
])
.then(fcl.decode);
getCollection
コレクションIDに対応するトランザクションIDリストを含んでいる全てのコレクションを返します。
⚠️指定するブロックの範囲は、現在のスポークからでなければなりません。過去のスポーク中に発行されたすべてのイベントは、現在利用できません。
Arguments
Name | Type | Description |
---|---|---|
collectionID |
string | The id of the collection. |
Returns after decoding
Type | Description |
---|---|
CollectionObject | An object with the id and a list of transactions within the requested collection. |
Usage
import * as fcl from '@onflow/fcl';
const collection = await fcl
.send([
fcl.getCollection(
'cccdb0c67d015dc7f6444e8f62a3244ed650215ed66b90603006c70c5ef1f6e5',
),
])
.then(fcl.decode);
getTransactionStatus
TransactionStatusObject の形式でトランザクションのステータスを返します。
⚠️transactionID は現在のスポーク以降のでなければなりません。
📣このメソッドを直接呼び出すのではなく、fcl.tx(id)
を使ってトランザクションステータスをサブスクライブすることを検討してください。
Arguments
Name | Type | Description |
---|---|---|
transactionId |
string | The transactionID returned when submitting a transaction. Example: 9dda5f281897389b99f103a1c6b180eec9dac870de846449a302103ce38453f3
|
Returns after decoding
Type | Description |
---|---|
TransactionStatusObject | Object representing the result/status of a transaction |
Usage
import * as fcl from '@onflow/fcl';
const status = await fcl
.send([
fcl.getTransactionStatus(
'9dda5f281897389b99f103a1c6b180eec9dac870de846449a302103ce38453f3',
),
])
.then(fcl.decode);
getTransaction
トランザクションオブジェクトを返します。
⚠️transactionID は現在のスポーク以降のでなければなりません。
📣このメソッドを直接呼び出すのではなく、fcl.tx(id).onceSealed()
を使用することを検討してください。
Arguments
Name | Type | Description |
---|---|---|
transactionId |
string | The transactionID returned when submitting a transaction. Example: 9dda5f281897389b99f103a1c6b180eec9dac870de846449a302103ce38453f3
|
Returns after decoding
Type | Description |
---|---|
TransactionObject | Object representing the result/status of a transaction |
Usage
import * as fcl from '@onflow/fcl';
const tx = await fcl
.send([
fcl.getTransaction(
'9dda5f281897389b99f103a1c6b180eec9dac870de846449a302103ce38453f3',
),
])
.then(fcl.decode);
subscribeEvents
info
subscribeEvents SDK builderは、イベントのリスニングを開始するブロックを直接指定したい場合など、より高度な使用事例を対象としています。ほとんどの使用事例では、あらかじめ構築されたインタラクションfcl.events(eventTypes)
の使用を検討してください。
一度デコードすると、イベントストリーム接続を返すビルドです。Access Nodeに対しWebSocket接続を確立し、指定されたパラメータでイベントを受信します。
Arguments
Name | Type | Description |
---|---|---|
opts |
Object |
以下のキーを持つオブジェクト: |
opts.startBlockId |
string | undefined | The block ID to start listening for events. Example: 9dda5f281897389b99f103a1c6b180eec9dac870de846449a302103ce38453f3
|
opts.startHeight |
number | undefined | The block height to start listening for events. Example: 123
|
opts.eventTypes |
string[] | undefined | The event types to listen for. Example: A.7e60df042a9c0868.FlowToken.TokensWithdrawn
|
opts.addresses |
string[] | undefined | The addresses to listen for. Example: 0x7e60df042a9c0868
|
opts.contracts |
string[] | undefined | The contracts to listen for. Example: 0x7e60df042a9c0868
|
opts.heartbeatInterval |
number | undefined | The interval in milliseconds to send a heartbeat to the Access Node. Example: 10000
|
Returns after decoding
Type | Description |
---|---|
EventStreamConnection | A connection to the event stream |
Usage
import * as fcl from '@onflow/fcl';
const eventStream = await fcl
.send([
fcl.subscribeEvents({
eventTypes: 'A.7e60df042a9c0868.FlowToken.TokensWithdrawn',
}),
])
.then(fcl.decode);
eventStream.on('heartbeat', (heartbeat) => {
console.log(heartbeat);
});
eventStream.on('events', (event) => {
console.log(event);
});
eventStream.on('error', (error) => {
console.log(error);
});
eventStream.on('end', () => {
console.log('Connection closed');
});
eventStream.close();
getEvents (Deprecated)
Use fcl.getEventsAtBlockHeightRange
or fcl.getEventsAtBlockIds
.
getLatestBlock (Deprecated)
Use fcl.getBlock
.
getBlockById (Deprecated)
Use fcl.getBlock
and fcl.atBlockId
.
getBlockByHeight (Deprecated)
Use fcl.getBlock
and fcl.atBlockHeight
.
Utility Builders
これらのビルダーは、scriptやtransactionなどの他のビルダーと併用して使用されます。
⚠️Recommendation:これらのビルダーの使用が必要となる特定のユースケースがない限り、
fcl.query({...options}
またはfcl.mutate({...options})
でほとんどのケースの目的を達成できるはずです。
arg
fcl.args[...]
と一緒に使用するユーティリティビルダーで、FCLでサポートされた引数を作成します。
Arguments
Name | Type | Description |
---|---|---|
value |
any | Any value that you are looking to pass to other builders. |
type |
FType | A type supported by Flow. |
Returns
Type | Description |
---|---|
ArgumentObject | Holds the value and type passed in. |
Usage
import * as fcl from '@onflow/fcl';
await fcl
.send([
fcl.script`
access(all) fun main(a: Int, b: Int): Int {
return a + b
}
`,
fcl.args([
fcl.arg(5, fcl.t.Int), /* a */
fcl.arg(4, fcl.t.Int), /* b */
]),
])
.then(fcl.decode);
args
他のビルダーと組み合わせて使用するユーティリティビルダーで、値とサポートされている型を持つ引数を渡します。
Arguments
Name | Type | Description |
---|---|---|
args |
[Argument Objects] | An array of arguments that you are looking to pass to other builders. |
Returns
Type | Description |
---|---|
Partial Interaction | An interaction that contains the arguments and types passed in. This alone is a partial and incomplete interaction. |
Usage
import * as fcl from '@onflow/fcl';
await fcl
.send([
fcl.script`
access(all) fun main(a: Int, b: Int): Int {
return a + b
}
`,
fcl.args([
fcl.arg(5, fcl.t.Int), /* a */
fcl.arg(4, fcl.t.Int), /* b */
]),
])
.then(fcl.decode); /* 9 */
Template Builders
⚠️Recommended: 以下の機能は、
fcl.query({...options}
やfcl.mutate({...options})
によって簡素化されており、以下の関数よりもこれらを使用することが推奨されます。
script
Cadenceのスクリプトを実行するのに使用します。
📣 fcl.args(...)
と併用して、動的に引数を渡します。
Arguments
Name | Type | Description |
---|---|---|
CODE |
string | Should be valid Cadence script. |
Returns
Type | Description |
---|---|
Interaction | An interaction containing the code passed in. |
Usage
import * as fcl from '@onflow/fcl';
const code = `
access(all) fun main(): Int {
return 5 + 4
}
`;
const answer = await fcl.send([fcl.script(code)]).then(fcl.decode);
console.log(answer); // 9
transaction
Cadence トランザクションを実行するのに使用します。
⚠️fcl.payer
、fcl.proposer
、fcl.authorizations
と一緒に使用する必要があります。
📣 fcl.args[...]
と併用して、動的に引数を渡します。
Arguments
Name | Type | Description |
---|---|---|
CODE |
string | Should be valid a Cadence transaction. |
Returns
Type | Description |
---|---|
Partial Interaction |
fcl.payer 、fcl.proposer 、fcl.authorizations と一緒に使用することで完全なやり取り可能なオブジェクトになります。 |
Usage
import * as fcl from '@onflow/fcl';
/* a script only needs to resolve the arguments to the script */
const response = await fcl.send([fcl.script`${script}`, fcl.args(args)]);
/* note: response values are encoded, call await fcl.decode(response) to get JSON */
/* a transaction requires multiple 'builders' that need to be resolved prior to being sent to the chain - such as setting the authorizations. */
const response = await fcl.send([
fcl.transaction`
${transaction}
`,
fcl.args(args),
fcl.proposer(proposer),
fcl.authorizations(authorizations),
fcl.payer(payer),
fcl.limit(9999),
]);
/* note: response contains several values (Cad) */
Pre-built Interactions(ショートハンドメソッド)
これらの関数は、チェーンへのインタラクションのsendとdecodeのステップをスキップした簡略化した方法です。さらに多くのpre-builtされたインタラクションがまもなく登場します。
account
公開アドレスからアカウントの詳細情報を返す、pre-builtされたインタラクション。
Arguments
Name | Type | Description |
---|---|---|
address |
Address | ユーザーアカウントのアドレス(プレフィックス付きorプレフィックスなし、両方の形式に対応)。 |
Returns
Type | Description |
---|---|
AccountObject | A JSON representation of a user account. |
Usage
import * as fcl from '@onflow/fcl';
const account = await fcl.account('0x1d007d755706c469');
block
最新のブロック(オプションでsealedのものとそうで無いもの)を、IDまたは高さで返す、あらかじめpre-builtされたインタラクション。
Arguments
Name | Type | Default | Description |
---|---|---|---|
sealed |
boolean | false | If the latest block should be sealed or not. See block states. |
id |
string | ID of block to get. | |
height |
int | Height of block to get. |
Returns
Type | Description |
---|---|
BlockObject | A JSON representation of a block. |
Usage
import * as fcl from '@onflow/fcl';
await fcl.block(); /* get latest finalized block */
await fcl.block({ sealed: true }); /* get latest sealed block */
await fcl.block({
id: '0b1bdfa9ddaaf31d53c584f208313557d622d1fedee1586ffc38fb5400979faa',
}); /* get block by id */
await fcl.block({ height: 56481953 }); /* get block by height */
latestBlock (Deprecated)
最新のブロック(オプションでsealedのものまたはそうで無いもの)を返す、pre-builtされたインタラクション。
Arguments
Name | Type | Default | Description |
---|---|---|---|
isSealed |
boolean | false | If the latest block should be sealed or not. See block states. |
Returns
Type | Description |
---|---|
BlockObject | A JSON representation of a block. |
Usage
import * as fcl from '@onflow/fcl';
const latestBlock = await fcl.latestBlock();
Transaction Status Utility(tx情報)
tx
トランザクションで、(ポーリングによる)その後のステータス更新と確定した結果が利用可能になった際に取得するよう設定できるユーティリティ関数。 ⚠️ポーリングレートは2500ms
に設定されており、トランザクションがsealedになるまでその間隔で更新します。
Arguments
Name | Type | Description |
---|---|---|
transactionId |
string | A valid transaction id. |
Returns
Name | Type | Description |
---|---|---|
snapshot() |
function | Returns the current state of the transaction. |
subscribe(cb) |
function | Calls the cb passed in with the new transaction on a status change. |
onceFinalized() |
function | Provides the transaction once status 2 is returned. See Tranasaction Statuses. |
onceExecuted() |
function | Provides the transaction once status 3 is returned. See Tranasaction Statuses. |
onceSealed() |
function | Provides the transaction once status 4 is returned. See Tranasaction Statuses. |
Usage
import * as fcl from '@onflow/fcl';
const [txStatus, setTxStatus] = useState(null);
useEffect(() => fcl.tx(txId).subscribe(setTxStatus));
Event Polling Utility(イベント)
events
イベントで、(ポーリングによる)その後の取得可能なイベントがある際に取得できるようにするユーティリティ関数。 ⚠️ポーリングレートは10000ms
に設定されており、新しいイベントを取得するためにその間隔で更新します。
Note:⚠️fcl.eventPollRate
の値は、すべてのイベントサブスクライバのポーリングレートを変更するように設定できる場合があります。詳細は、FCL Configurationを参照してください。
Arguments
Name | Type | Description |
---|---|---|
eventName |
string | A valid event name. |
Returns
Name | Type | Description |
---|---|---|
subscribe(cb) |
function | Calls the cb passed in with the new event. |
Usage
import * as fcl from '@onflow/fcl';
/* in some react component */
fcl.events(eventName).subscribe((event) => {
console.log(event);
});
Examples
Types, Interfaces, and Definitions(オブジェクトの定義)
Builders
Buildersはモジュール関数であり、fcl.send([...builders])
と結合してインタラクションを作成することができます。インタラクションを作成するために必要なビルダーは、送信されるスクリプトまたはトランザクションに依存します。
Interaction
インタラクションは、チェーン上でアクションを実行するための情報を含むオブジェクトです。このオブジェクトはビルダーを通じて作成され、適切なアクセスノードAPI callに変換されます。インタラクションオブジェクトについてはこちらをご覧ください。"partial" interactionとは、意図したチェーン上のアクションに必要な情報が十分でないインタラクションオブジェクトです。複数のpartial interactionを(ビルダーを通じて)結合して、完全なインタラクションを作成することができます。
CurrentUserObject
Key | Value Type | Default | Description |
---|---|---|---|
addr |
Address | null |
The public address of the current user |
cid |
string | null |
Allows wallets to specify a content identifier for user metadata. |
expiresAt |
number | null |
Allows wallets to specify a time-frame for a valid session. |
f_type |
string | 'USER' |
A type identifier used internally by FCL. |
f_vsn |
string | '1.0.0' |
FCL protocol version. |
loggedIn |
boolean | null |
If the user is logged in. |
services |
[ServiceObject] |
[] |
A list of trusted services that express ways of interacting with the current user's identity, including means to further discovery, authentication, authorization, or other kinds of interactions. |
AuthorizationObject
FCLが現在のユーザーに代わってトランザクションを承認するために必要なインターフェースにこの型は準拠しています。
Key | Value Type | Description |
---|---|---|
addr |
Address | The address of the authorizer |
signingFunction |
function | A function that allows FCL to sign using the authorization details and produce a valid signature. |
keyId |
number | The index of the key to use during authorization. (Multiple keys on an account is possible). |
sequenceNum |
number | A number that is incremented per transaction using they keyId. |
SignableObject
ユーザーの署名でメッセージに署名するためにFCLに必要なすべての情報を含むオブジェクト。
Key | Value Type | Description |
---|---|---|
addr |
Address | The address of the authorizer |
keyId |
number | The index of the key to use during authorization. (Multiple keys on an account is possible). |
signature |
function | A SigningFunction that can produce a valid signature for a user from a message. |
AccountObject
Flowブロックチェーン上のアカウントのJSON表現
Key | Value Type | Description |
---|---|---|
address |
Address | The address of the account |
balance |
number | The FLOW balance of the account in 10^8. |
code |
Code | The code of any Cadence contracts stored in the account. |
contracts |
Object: Contract | An object with keys as the contract name deployed and the value as the the cadence string. |
keys |
[KeyObject] | Any contracts deployed to this account. |
Address
Value Type | Description |
---|---|
string(formatted) | A valid Flow address should be 16 characters in length. A 0x prefix is optional during inputs. eg. f8d6e0586b0a20c1
|
ArgumentObject
An argument object created by fcl.arg(value,type)
Key | Value Type | Description |
---|---|---|
value |
any | Any value to be used as an argument to a builder. |
xform |
FType | Any of the supported types on Flow. |
ArgumentFunction
fcl.arg
関数とfcl型のt
を受け取り、fcl.arg(value,type)
の配列を返す関数
(arg, t) => Array<Arg>
Parameter Name | Value Type | Description |
---|---|---|
arg |
function | A function that returns an ArgumentObject - fcl.arg . |
t |
FType | Flowでサポートされているすべての型にアクセスできるオブジェクト |
Returns
Value Type | Description |
---|---|
[fcl.args] |
Array of fcl.args
|
Authorization Function
承認関数(authorization function)は、署名しようとしているユーザーの情報を生み出し、署名関数は、その情報を使用して署名を生成します。
⚠️この関数は常に非同期です。
📣 デフォルトでは、FCLは現在のユーザー(ブラウザのみでサインインしている場合)の承認オブジェクトを生成するfcl.authz
を公開しています。このインタフェースに準拠した独自の関数に承認オブジェクトが必要な場所で置き換えてください。(補足:特にバックエンドでは必要です)
Parameter Name | Value Type | Description |
---|---|---|
account |
AccountObject | The account of the user that is going to sign. |
Returns
Value Type | Description |
---|---|
Promise<[AuthorizationObject](#authorizationobject)> |
The object that contains all the information needed by FCL to authorize a user's transaction. |
Usage
const authorizationFunction = async (account) => {
/* authorization function need to return an account */
const { address, keys } = account
const tempId = `${address}-${keys[process.env.minterAccountIndex]}`;
const keyId = Number(KEY_ID);
let signingFunction = async signable => {
return {
keyId,
addr: fcl.withPrefix(address),
signature: sign(process.env.FLOW_MINTER_PRIVATE_KEY, signable.message), // signing function, read below
}
}
return {
...account,
address,
keyId,
tempId,
signingFunction,
}
Signing Function
ペイロードを消費し、トランザクションのための署名を生成します。
⚠️この関数は常に非同期です。
📣独自の署名関数(signing function)を書くのは、独自のカスタム承認関数(authorization function)を書いている場合のみにしてください。
Payload
注:これらの値は、最初の引数のペイロードオブジェクトから削除されます。
Parameter Name | Value Type | Description |
---|---|---|
message |
string | The encoded string which needs to be used to produce the signature. |
addr |
string | The encoded string which needs to be used to produce the signature. |
keyId |
string | The encoded string which needs to be used to produce the signature. |
roles |
string | The encoded string which needs to be used to produce the signature. |
voucher |
object | 生トランザクション情報。追加の安全とメッセージの信頼性欠如を補うため、メッセージの作成に使用することができます。 |
Returns
Value Type | Description |
---|---|
Promise<[SignableObject](#signableobject)> |
ユーザーのトランザクションを認証するのにFCLが必要なすべての情報を含むオブジェクト。 |
Usage
import * as fcl from '@onflow/fcl';
import { ec as EC } from 'elliptic';
import { SHA3 } from 'sha3';
const ec: EC = new EC('p256');
const produceSignature = (privateKey, msg) => {
const key = ec.keyFromPrivate(Buffer.from(privateKey, 'hex'));
const sig = key.sign(this.hashMsg(msg));
const n = 32;
const r = sig.r.toArrayLike(Buffer, 'be', n);
const s = sig.s.toArrayLike(Buffer, 'be', n);
return Buffer.concat([r, s]).toString('hex');
};
const signingFunction = ({
message, /* The encoded string which needs to be used to produce the signature. */
addr, /* The address of the Flow Account this signature is to be produced for. */
keyId, /* The keyId of the key which is to be used to produce the signature. */
roles: {
proposer, /* A Boolean representing if this signature to be produced for a proposer. */
authorizer, /* A Boolean representing if this signature to be produced for a authorizer. */
payer, /* A Boolean representing if this signature to be produced for a payer. */
},
voucher, /* The raw transactions information, can be used to create the message for additional safety and lack of trust in the supplied message. */
}) => {
return {
addr, /* The address of the Flow Account this signature was produced for. */
keyId, /* The keyId for which key was used to produce the signature. */
signature: produceSignature(message), /* The hex encoded string representing the signature of the message. */
};
};
Examples:
TransactionObject
Key | Value Type | Description |
---|---|---|
args |
object | A list of encoded Cadence values passed into this transaction. These have not been decoded by the JS-SDK. |
authorizers |
[Address] | A list of the accounts that are authorizing this transaction to mutate to their on-chain account state. 詳しくはこちら。 |
envelopeSignatures |
[SignableObject] | A list of signatures generated by the payer role. 詳しくはこちら。 |
gasLimit |
number | The maximum number of computational units that can be used to execute this transaction. 詳しくはこちら. |
payer |
Address | The account that pays the fee for this transaction. 詳しくはこちら。 |
payloadSignatures |
[SignableObject] | A list of signatures generated by the proposer and authorizer roles. 詳しくはこちら。 |
proposalKey |
[ProposalKey] | The account key used to propose this transaction |
referenceBlockId |
string | A reference to the block used to calculate the expiry of this transaction |
script |
string | The UTF-8 encoded Cadence source code that defines the execution logic for this transaction |
TransactionRolesObject
Key Name | Value Type | Description |
---|---|---|
proposer | boolean | A Boolean representing if this signature to be produced for a proposer. |
authorizer | boolean | A Boolean representing if this signature to be produced for an authorizer. |
payer | boolean | A Boolean representing if this signature to be produced for a payer. |
各トランザクション・ロールの意味については、singing rolesを参照してください。
TransactionStatusObject
Key | Value Type | Description |
---|---|---|
blockId |
string | ID of the block that contains the transaction. |
events |
[EventObject] | An array of events that were emitted during the transaction. |
status |
TransactionStatus | The status of the transaction on the blockchain. |
statusString |
TransactionStatus | The status as as descriptive text (e.g. "FINALIZED"). |
errorMessage |
string | An error message if it exists. Default is an empty string '' . |
statusCode |
number | The pass/fail status. 0 indicates the transaction succeeded, 1 indicates it failed. |
EventName
Value Type | Description |
---|---|
string(formatted) | A event name in Flow must follow the format A.{AccountAddress}.{ContractName}.{EventName} eg. A.ba1132bc08f82fe2.Debug.Log
|
Contract
Value Type | Description |
---|---|
string(formatted) | A formatted string that is a valid cadence contract. |
KeyObject
これは、Flowブロックチェーン上のキーのJSON表現です。
Key | Value Type | Description |
---|---|---|
index |
number | The address of the account |
publicKey |
string | The public portion of a public/private key pair |
signAlgo |
number | An index referring to one of ECDSA_P256 or ECDSA_secp256k1
|
hashAlgo |
number | An index referring to one of SHA2_256 or SHA3_256
|
weight |
number | A number between 1 and 1000 indicating the relative weight to other keys on the account. |
sequenceNumber |
number | This number is incremented for every transaction signed using this key. |
revoked |
boolean | If this key has been disabled for use. |
ProposalKeyObject
ProposalKeyはアカウントキーで、トランザクションを提案するために使用されます。
提案キーは、アカウント上の特定のキーと、そのキーの最新のシーケンス番号をもとに作られします。このシーケンス番号は、リプレイ攻撃を防止するために使用されます。
シーケンス番号の詳細については、こちらをご覧ください。
Key | Value Type | Description |
---|---|---|
address |
Address | The address of the account |
keyIndex |
number | The index of the account key being referenced |
sequenceNumber |
number | The sequence number associated with this account key for this transaction |
BlockObject
Flowブロックチェーン上のブロックのJSON表現です。
Key | Value Type | Description |
---|---|---|
id |
string | The id of the block. |
parentId |
string | The id of the parent block. |
height |
number | The height of the block. |
timestamp |
object | Contains time related fields. |
collectionGuarantees |
[CollectionGuaranteeObject] | Contains the ids of collections included in the block. |
blockSeals |
[SealedBlockObject] | The details of which nodes executed and sealed the blocks. |
signatures |
Uint8Array([numbers]) | All signatures. |
BlockHeaderObject
ブロックのヘッダー値のみを含むBlockObject のサブセットです。
Key | Value Type | Description |
---|---|---|
id |
string | The id of the block. |
parentId |
string | The id of the parent block. |
height |
number | The height of the block. |
timestamp |
object | Contains time related fields. |
CollectionGuaranteeObject
1つのブロックに含まれているコレクションです。(コレクションとは、同じブロックに含まれるトランザクションのリストです。)
Key | Value Type | Description |
---|---|---|
collectionId |
string | The id of the block |
signatures |
SignatureObject | All signatures |
CollectionObject
コレクションとは、同じブロックに含まれるトランザクションのリストです。
Key | Value Type | Description |
---|---|---|
id |
string | The id of the collection. |
transactionIds |
[string] | The ids of the transactions included in the collection. |
ResponseObject
fcl.send(...)
から返されるFCLのすべてのレスポンスのフォーマット。キーの値と説明の詳細については、こちらをご覧ください。
Key |
---|
tag |
transaction |
transactionStatus |
transactionId |
encodedData |
events |
account |
block |
blockHeader |
latestBlock |
collection |
Event Object
Key | Value Type | Description |
---|---|---|
blockId |
string | ID of the block that contains the event. |
blockHeight |
number | Height of the block that contains the event. |
blockTimestamp |
string | The timestamp of when the block was sealed in a DateString format. eg. '2021-06-25T13:42:04.227Z'
|
type |
EventName | A string containing the event name. |
transactionId |
string | Can be used to query transaction information, eg. via a Flow block explorer. |
transactionIndex |
number | Used to prevent replay attacks. |
eventIndex |
number | Used to prevent replay attacks. |
data |
any | The data emitted from the event. |
Transaction Statuses
トランザクションのステータスは、フローブロックチェーンのネットワークと、トランザクションが完了し確定するまでのどの段階にあるかによって異なります。
Status Code | Description |
---|---|
0 |
Unknown |
1 |
Transaction Pending - Awaiting Finalization |
2 |
Transaction Finalized - Awaiting Execution |
3 |
Transaction Executed - Awaiting Sealing |
4 |
Transaction Sealed - Transaction Complete. At this point the transaction result has been committed to the blockchain. |
5 |
Transaction Expired |
GRPC Statuses
アクセスノードのGRPCの実装は、標準GRPC Coreステータスコード仕様に準拠しています。こちらをご覧ください。
FType
FCL arguments must specify one of the following support types for each value passed in.
1 | 2 |
---|---|
UInt |
fcl.arg(1, t.UInt) |
UInt8 |
fcl.arg(1, t.UInt8) |
UInt16 |
fcl.arg(1, t.UInt16) |
UInt32 |
fcl.arg(1, t.UInt32) |
UInt64 |
fcl.arg(1, t.UInt64) |
UInt128 |
fcl.arg(1, t.UInt128) |
UInt256 |
fcl.arg(1, t.UInt256) |
Int |
fcl.arg(1, t.Int) |
Int8 |
fcl.arg(1, t.Int8) |
Int16 |
fcl.arg(1, t.Int16) |
Int32 |
fcl.arg(1, t.Int32) |
Int64 |
fcl.arg(1, t.Int64) |
Int128 |
fcl.arg(1, t.Int128) |
Int256 |
fcl.arg(1, t.Int256) |
Word8 |
fcl.arg(1, t.Word8) |
Word16 |
fcl.arg(1, t.Word16) |
Word32 |
fcl.arg(1, t.Word32) |
Word64 |
fcl.arg(1, t.Word64) |
UFix64 |
fcl.arg("0.123", t.UFix64) |
Fix64 |
fcl.arg("0.123", t.Fix64) |
String |
fcl.arg("ABC", t.String) |
Character |
fcl.arg("c", t.String) |
Bool |
fcl.arg(true, t.String) |
Address |
fcl.arg("0xABC123DEF456", t.Address) |
`Optional | fcl.arg("DEF", t.Optional(t.String)) |
Array |
fcl.args([ fcl.arg(["First", "Second"], t.Array(t.String)) ]) |
Dictionary |
fcl.args([fcl.arg([{key: 1, value: "one"}, {key: 2, value: "two"}], t.Dictionary({key: t.Int, value: t.String}))]) |
Path |
fcl.args([fcl.arg([{key: 1, value: "one"}, {key: 2, value: "two"}], t.Dictionary({key: t.Int, value: t.String}))]) |
StreamConnection
1つのストリーム接続は1つのオブジェクトであり、あらゆる WebSocket データストリームから一般的なデータをサブスクライブします。これはすべてのストリーム接続の基本形です。close
と error
の 2 つのチャンネルは、ストリームの終了や発生したエラーを通知するために使用されるため、常に利用可能です。
interface StreamConnection<ChannelMap extends { [name: string]: any }> {
/* Subscribe to a channel */
on<C extends keyof ChannelMap>(
channel: C,
listener: (data: ChannelMap[C]) => void,
): this;
on(event: 'close', listener: () => void): this;
on(event: 'error', listener: (err: any) => void): this;
/* Unsubscribe from a channel */
off<C extends keyof ChannelMap>(
event: C,
listener: (data: ChannelMap[C]) => void,
): this;
off(event: 'close', listener: () => void): this;
off(event: 'error', listener: (err: any) => void): this;
/* Close the connection */
close(): void;
}
Usage
import { StreamConnection } from "@onflow/typedefs"
const stream: StreamConnection = ...
stream.on("close", () => {
/* Handle close */
})
stream.on("error", (err) => {
/* Handle error */
})
stream.close()
EventStream
イベントストリームは、イベントとブロックハートビートを発行するストリーム接続です。接続パラメータに基づき、ハートビートは少なくとも固定ブロック高インターバルと同じ頻度で発行されます。これは、StreamConnectionの特定の変形です。
type EventStream = StreamConnection<{
events: Event[];
heartbeat: BlockHeartbeat;
}>;
Usage
import { EventStream } from "@onflow/typedefs"
const stream: EventStream = ...
stream.on("events", (events) => {
/* Handle events */
})
stream.on("heartbeat", (heartbeat) => {
/* Handle heartbeat */
})
/* Close the stream */
stream.close()
BlockHeartbeat
export interface BlockHeartbeat {
blockId: string;
blockHeight: number;
timestamp: string;
}
Usage
import { BlockHeartbeat } from "@onflow/typedefs"
const heartbeat: BlockHeartbeat = ...
SignatureObject
署名オブジェクトは、特定のメッセージの署名、およびそのメッセージに署名したアカウントと keyId を表現するために使用されます。
Key | Value Type | Description |
---|---|---|
addr |
Address | the address of the account which this signature has been generated for |
keyId |
number | The index of the key to use during authorization. (Multiple keys on an account is possible). |
signature |
string | a hexidecimal-encoded string representation of the generated signature |
Last updated on Dec 3, 2024 by Jordan Ribbink
翻訳元
Previous << Flow Client Library (FCL)
Flow BlockchainのCadence version1.0ドキュメント (FCL API Reference)