• 文書
  • モジュール
    • 前書き
    • 前書き
    • Contents
    • QURASブロックチェーンの構造
    • QURASブロックチェーンのCONSENSUS アルゴリズム
    • QURASブロックチェーンのVIRTUAL MACHINEの構造
    • QURASブロックチェーンの暗号化モジュール
    • QURASブロックチェーンのJSON-RPC
    • QURASブロックチェーンの構築
    • Future Projects
    • FUTUREのプロジェクトおよびサビース
    • 参照
    • 参照
  • テクニカルペーパー
  • 開発リファレンス
  • 日本語
    • EN
    • 日本語
  • 前書き
  • 前書き
  • Contents
  • QURASブロックチェーンの構造
  • QURASブロックチェーンのCONSENSUS アルゴリズム
  • QURASブロックチェーンのVIRTUAL MACHINEの構造
  • QURASブロックチェーンの暗号化モジュール
  • QURASブロックチェーンのJSON-RPC
  • QURASブロックチェーンの構築
  • Future Projects
  • FUTUREのプロジェクトおよびサビース
  • 参照
  • 参照
QURASブロックチェーンのVIRTUAL MACHINEの構造

QURASブロックチェーンはSmart Contractを実行するためにエンジンにVirtual Machineを持っている。

ここではQURASブロックチェーンのVirtual Machineの構造について見ることにしよう。

Virtual Machineについて見る前にSmart Contract参照して欲しい。

Smart ContractはOpcodeのByte列で構成されている。

またユーザたちはSmart ContractをC#を利用して作成してSmart Contract Compilerを利用してOpcodeの列であるByteコードを得ることになる。

まずはSmart Contract Compilerについて見ることにしよう。

Smart Contract Compiler

Smart Contract Compilerはユーザが作成したSmart Contractコード(ユーザLevelのC#コード)QURASブロックチェーンのVMで実行できるOPCODEの列であるScriptコードに変換させる役割を遂行する。

ユーザたちはSmart ContractをQURASブロックチェーンで提供するFrameworkを利用して開発し、そのコードをVMで認識できるScriptに変換させる役割をこのSmart Contract Compilerを利用してすることができる。

Opcode

QURAS Smart Contract Virtual Machinは次のようなOpcode Setを提供する。

VMで提供するOpcode内容は大きく次のようである。

  • 文字列関連のOpcodeの集まり 文字列関連処理などを提供する。
  • スタックの操作と関連したOpcodeの集まり CやC++で提供するスタックの操作のような命令を提供する。
  • Process操作と関連したOpcodeの集まり If、forと同じような命令を提供する。
  • 定数関連のOpcodeの集まり Constのような命令を提供する。
  • 算術演算と関連したOpcodeの集まり +、-、*、/のような算術演算と関連した命令を提供する。
  • 暗号化と関連したOpcodeの集まり ユーザたちが暗号化を利用できるようにECDSA、SHAと他のさまざまなアルゴリズムを利用できるように提供する。
  • データの構造と関連したOpcodeの集まり このOpcode関連命令には配列と複雑な形の資料の構造を定義できるように提供する。
Opcode Fee

手数料には2つの方式のFeeが存在する。

その二つの点について見ることとしよう。

Deployment Fee

QURASブロックチェーンでユーザたちはSmart Contractで提供する保存スペースを利用して様々なサービスを開発利用できる。

その時保存スペースに対する使用は無料ではない。

QURASブロックチェーンでユーザたちはSmart Contractを作成してそれをブロックチェーンにDeployさせてユーザがその内容を利用できるようにする。

ユーザたちはSmart ContractをDeployさせる時保存スペースとSystem Callなどについて手数料を支払わなければならない。

つまりDeployment FeeはSmart ContractをDeployさせる際に利用される手数料である。

システムの関数に対する手数料は下記の通りである。

SysCall Fee [Gas]
Runtime.CheckWitness 42.2
Blockchain.GetHeader 21.1
Blockchain.GetBlock 42.2
Blockchain.GetTransaction 21.1
Blockchain.GetAccount 21.1
Blockchain.GetValidators 42.2
Blockchain.GetAsset 21.1
Blockchain.GetContract 21.1
Transaction.GetReferences 42.2
Account.SetVotes 211
Validator.Register 211000
Asset.Create (system asset) 5000
Asset.Renew (system asset) [per year] 5000
Contract.Create 5000
Contract.Migrate 5000
Storage.Get 21.1
Storage.Put [per KB]* 211
Storage.Delete 21.1
(Default) 0.21
Implementation Fee

QURASはSmart Contractに対する安全的な実行環境を用意してすべてのノードからSmart Contractに対する結果がすべてのノードで同一に得られるように設計されてすべてのノードはスマートコントラクトを実行するためにfeeを払わなければならない。

また手数料はSmart Contractの計算ロジックつまりOpcodeについて決定されることになり、単位はQurasToken単位である。

もしFeeが不足すればSmart Contractは失敗することになる。

すべてのユーザたちはQurasToken 10に該当したSmart Contractについた無料で利用できる。

基本的なopcodeに対する手数料は下記の通りである。

Instruction Fee [Gas]
OpCode.PUSH16 [or less] 0
OpCode.NOP 0
OpCode.APPCALL 0.01
OpCode.TAILCALL 0.01
OpCode.SHA1 0.01
OpCode.SHA256 0.01
OpCode.HASH160 0.02
OpCode.HASH256 0.02
OpCode.CHECKSIG 0.1
OpCode.CHECKMULTISIG [per signature] 0.1
OpCode.VERIFY 0.001
(Default) 0.001
VMの機能

QURASブロックチェーンでSmart Contract実行結果はすべてのノードで一致しなければならない。

もしSmart Contractの実行結果がノードによって変わったらTransactionに対する検証結果と合意を進めることができなくなる。

この時C、C++や体系CPUの形式によって実行結果が違うことが存在する。

またシステムが32bitのか64bitのかによってintとようなデータの大きさが変わることとして計算結果が変わる可能性もある場合が存在する。

しかしQURASブロックチェーンのSmart Contractの実行結果はすべてのノードすなわちどのようなCPU、OS環境に関係なく同一の結果を出さなければならない。

ブロックチェーンはすべてのノードの同一状態のブロックチェーン帳簿によって運営されるためにノードに存在するブロックのデータが変われば、ブロックチェーンを維持することはできない。

このような問題点としてQURASブロックチェーンのSmart Contract VMはすべての環境で同じ入力に対して同一の結果物を出るように設計されなければならない。

つまりQURASブロックチェーンは一貫性の特徴を持たなければならない。

それではQURASブロックチェーンで一貫性の特徴について見ることにしよう。

一貫性ではじめは時間である。

すべてのノードはブロックの合意でブロックにTimeStampのような項目が存在する。

もしSmart Contractに時間関連関数を利用する時ノードから得られる時間が全て差があれば、結果は変わることになるだろう。

つまりQURASブロックのチェーンに参加したノードの時間同期化は必須である。

これからQURASブロックチェーンに参加するすべてのノードはシステムの時間同期化を進めた状態で連結することを要求しており、それによってQURASブロックチェーンに連結されるように設計した。

こうすることによってSmart Contractで時間同期の問題を解決した。

次はランスの発生と関連した問題である。

ランスの発生はすべてのノードによってお互いに異なる結果を発生させることができる。

分散されたネットワークでこのような問題を解決するために出た方法がランスの発生にSeedの概念を導入することである。

つまりSeedを導入して同じのSeedに限って同じ結果が出るように設計されたランス発生器を利用してブロックチェーンで同期化を実現することができる。

QURASブロックチェーンではブロックのHash値をSeedで利用してランス発生器を利用することになる。

また提起れる可能性がある問題はSmart Contractで利用される保存スペースのデータに対する一貫性を保障することである。

QURASブロックチェーンでは分散帳簿を利用しているのでデータに対する決定性はすべてのノードで同じである。

またSmart Contractの保存スペースに保存されたデータはただContractのみがアクセスすることができるものとして決定論的だと見ることができる。

これにしてブロックチェーンで発生するすべてのノードの状態はすべて同一に管理できるようになる。

SMART CONTRACTの類型
QURASブロックチェーンで提供するSmart Contract類型には実行方式によって次のように分けられる。
Verification Contract

QURASブロックチェーンを見ると他のビットコインのようにpublic-keyによって管理されるアドレス方式ではなくContractアドレス方式を利用する。

QURASブロックチェーンでは全てのアドレスはScriptHashによって生成される。

ScriptHashはSignコードを検証できるOpcodeのロジックが入っている。

QURASブロックチェーンのアドレスはこのScriptHashによって作られるようになり、アドレスの帯域も一つのContractと見ることができる。

つまり一般的なコイン伝送を見れば一つのContractで見られるし、Transactionが発生すればSignの検証をScriptHashのOpcodeを実行して進行するようになっている。

こうしたContractをVerification Contractと呼ぶが、これの入力としてSign値とScriptHash値が入って戻す値ではただBool型としてtrueとfalseの間の一つの値を持つ。

つまりこのようなContractは戻す値の結果によってtrueの場合はブロックチェーンに入ってfalseの場合は失敗で認めてTransactionがなくなっている。

Application Contract

このTransactionはQURASブロックチェーンのSmart Contractで一番多く利用されるContractである。

このTransactionは特定のTransactionによって実行されるが実行されながらシステムの状態に対するアクセスと更新を進めることができるし、またContract Storageの値を変更し、照会することができる。

Application ContractはTransactionを発生した場合、Contract ScriptによってFeeを払わなければならず、Feeが足りない場合Application Contractは失敗に終わることになる。

Function Contract

Smart Contractを作成するときにユーザは他のContractで呼び出すことができるように関数をPublic型とすることができる。

このような場合利用できるContractとしてFunction Contractが存在する。

つまりSmart ContractユーザたちはすでにDeployされたSmart ContractのFunctionを呼び出す時、そういうContractを使用することになる。

QURASブロックチェーンのCONSENSUS アルゴリズム QURASブロックチェーンの暗号化モジュール
  • Smart Contract Compiler
  • Opcode
  • Opcode Fee
  • Deployment Fee
  • Implementation Fee
  • VMの機能
  • SMART CONTRACTの類型
  • Verification Contract
  • Application Contract
  • Function Contract
Tweets by @qurasofficial
Tweets by qurasofficial
  • 文書
  • テクニカルペーパー
  • 開発リファレンス
私たちはここにいる!
コミュニティ
  • Quras Telegram Group
  • Facebook
  • Twitter
更新を取得するためにあなたのEメールアドレスを登録しなさい

Copyright © 2019 Quras. All Rights Reserved.

info@quras.io