Previous << Run-time Types
Next >> Environment Information
panic
view fun panic(_ message: String): Never
プログラムを無条件に終了し、回復不能なエラーが発生した理由を説明するメッセージを出力します。
panic("something went wrong: ...")
assert
view fun assert(_ condition: Bool, message: String)
指定された条件が偽の場合にプログラムを終了し、その条件が偽である理由を説明するメッセージを出力します。この関数は内部の整合性チェックに使用します。
message引数はオプショナルです。
revertibleRandom
view fun revertibleRandom<T: FixedSizeUnsignedInteger>(modulo: T): T
疑似乱数の整数を返します。
T
には任意の固定サイズの符号無し整数型(FixedSizeUnsignedInteger
、すなわちUInt8
、UInt16
、UInt32
、UInt64
、UInt128
、UInt256
、Word8
、Word16
、Word32
、Word64
、Word128
、Word256
)のいずれかがあてはまります。
modulo引数はオプションです。指定された場合、返される整数は0
からmodulo-1
の間になります。指定されない場合、返される整数は0
からT
の最大値の間になります。modulo
が0の場合は関数エラーが発生します。
返される乱数のシーケンスは、各ブロックの各トランザクションごとに独立しています。Cadenceは、各トランザクションごとに暗号的に安全な疑似乱数生成器(CSPRG)を個別にインスタンス化します。2つのトランザクションのシードは、ほぼ確実に異なります。
返される乱数は予測不可能であり(ブロック構築時のマイナーにとっては予測不可能であり、関数呼び出し時のCadenceロジックにとっても予測不可能)、検証可能であり、マイナーや以前に実行されたCadenceコードによる偏りが生じないようになっています。詳細は、Secure random number generator for Flow’s smart contractsおよびFLIP120を参照してください。
ただし、開発者はrevertibleRandom()
を正しく使用する必要があります。
⚠WARNING
トランザクションは、そのすべてのアクションをアトミックに元に戻すことができます。信頼できない当事者によって送信されたトランザクションが、好ましい結果を事後選択し、好ましくない結果のトランザクションを元に戻してしまうことが可能なのです。
返された乱数に対して事後選択を行わない信頼できる当事者により呼ばれる限り、依然とこの関数の使用は安全です。
この制限は、トランザクションを一括してロールバックできるスマートコントラクトプラットフォームに内在するものであり、これは安全なランダム性のみでは解決できません。信頼できない当事者が、自身のトランザクションを通じて、乱数を生成するスマートコントラクトとやりとりできる場合、この暫定的な例(完全なチュートリアルはまもなく公開予定)で説明されているように、コミット・リベール方式を使用することが推奨されます。
RLP
Recursive Length Prefix (RLP)シリアライゼーションにより、任意のネストされたバイナリデータの配列のエンコードが可能です。
Cadenceでは、ビルトインのRLP
スマートコントラクトにRLPデコード関数が用意されており、インポートする必要はありません。
decodeString
view fun decodeString(_ input: [UInt8]): [UInt8]
RLPでエンコードされたバイト配列をデコードします。RLPではこれを"String"と呼びます。バイト配列は、"String"の値にエンコードされた単体の値のみが含まれている必要があります。エンコードされた値の型が一致しない場合、または不要なバイトが末尾にある場合、プログラムは中断します。デコード中にエラーが発生した場合、プログラムは中断します。
decodeList
view fun decodeList(_ input: [UInt8]): [[UInt8]]
RLP-encoded listを、RLP-encoded itemsの配列にデコードします。
この関数は再帰的にデコードを行わないことに注意してください。そのため、結果の配列のそれぞれの要素はRLP-encoded dataとなります。バイト配列は、リストの値にエンコードされた単体の値のみが含まれている必要があります。エンコードされた値の型が一致しない場合、または不要なバイトが末尾にある場合、プログラムは中断します。デコード中にエラーが発生した場合、プログラムは中断します。
翻訳元
Flow BlockchainのCadence version1.0ドキュメント (Built-in Functions)