5分でVCPを試す
1. SDKをインストール
お使いの環境に合わせたSDKを選択
2. イベントをログ
取引イベントをVCP形式で記録
3. 検証完了
VCP Explorerで透明性を確認
VCPチェーンの整合性をリアルタイムで検証
推奨:まずはSilver Tierでログだけ取り始める
本番システムに影響を与えず、並行してVCPログを生成する「シャドーロギング」から始めることを推奨します。
# Python でのシンプルな実装例
pip install vcp-core-py
from vcp import VCPLogger, Tier
# Silver Tier ロガーを初期化
logger = VCPLogger(tier=Tier.SILVER, private_key="your-key")
# 取引イベントを記録
logger.log_order(
symbol="EURUSD",
side="BUY",
quantity="100000",
price="1.08450"
)
# ローカルにJSON形式で保存(本番システムと並行稼働)
logger.save("./vcp_logs/")
公式SDK一覧
vcp-core-py
Python 3.8+データサイエンティスト、リスク管理者、バックテスト向け。高レベルAPIで簡単に統合可能。
pip install vcp-core-py
vcp-core-cpp
C++17/20HFTエンジニア、取引所開発者向け。マイクロ秒レベルの超低レイテンシ実装。
# CMake経由でインストール git clone https://github.com/vso/vcp-core-cpp cmake -B build && cmake --build build
vcp-mql-bridge
MQL4/5リテールプロップ開発者、EA開発者向け。MT4/MT5に簡単統合可能なDLL/EA。
// MT4/MT5のExpertフォルダにコピー // #include <VCP_Bridge.mqh>
Tier別実装パターン
ビジネス要件と技術的制約に応じて、3つのコンプライアンスTierから選択できます。
Platinum Tier
HFT・取引所・機関投資家向け
技術要件
- 時刻同期: PTP (IEEE 1588) ナノ秒精度
- 実装: カーネルバイパス (DPDK/AF_XDP)
- レイテンシ: <1μs ロギングオーバーヘッド
- SDK: vcp-core-cpp (C++17/20)
ユースケース
- 高頻度取引 (HFT)
- 暗号資産取引所
- 機関投資家のアルゴ取引
- MiFID II 完全準拠
// C++ Platinum実装例 (SBEバイナリエンコーディング)
#include <vcp/platinum.hpp>
vcp::PlatinumLogger logger(
vcp::ClockSource::PTP_HARDWARE, // PTCハードウェアクロック
vcp::Encoding::SBE // Simple Binary Encoding
);
// マイクロ秒単位の高精度ロギング
logger.log_order_accepted(order_id, timestamp_ns);
Gold Tier
中規模ブローカー・Propファーム向け
技術要件
- 時刻同期: NTP マイクロ秒精度
- 実装: サーバーサイド統合
- レイテンシ: <100μs ロギングオーバーヘッド
- SDK: vcp-core-py / vcp-core-cpp
ユースケース
- 中規模ブローカー
- プロップトレーディングファーム
- アルゴリズム取引プラットフォーム
- 規制準拠が必要な業者
# Python Gold実装例 (サーバーサイド統合)
from vcp import VCPLogger, Tier, ClockSync
logger = VCPLogger(
tier=Tier.GOLD,
clock_sync=ClockSync.NTP_SYNCED,
private_key_path="./server_key.pem"
)
# サーバー側で取引イベントをインターセプト
@trading_engine.on_order_executed
def log_execution(order):
logger.log_execution(
order_id=order.id,
symbol=order.symbol,
side=order.side,
quantity=str(order.quantity),
price=str(order.price)
)
Silver Tier
ホワイトラベル・小規模業者向け
技術要件
- 時刻同期: NTP/Best-effort ミリ秒精度
- 実装: クライアントサイド統合
- レイテンシ: 非同期(取引に影響なし)
- SDK: vcp-mql-bridge (MT4/MT5)
ユースケース
- ホワイトラベルPropファーム
- 小規模ブローカー
- 個人トレーダーのEA
- パイロット導入・PoC
Silver Tierの戦略的価値
ホワイトラベル業者はサーバーに手を出せない制約がありますが、Silver Tierの「クライアントサイド署名」により、 ブローカーを経由せずに独立した監査ログを生成できます。これは技術的妥協ではなく、ガバナンス上の革新です。
// MQL5 Silver実装例 (クライアントサイド署名)
#include <VCP_Bridge.mqh>
// EA初期化時にVCPロガーをセットアップ
int OnInit() {
VCP_Init(TIER_SILVER, "client_private_key");
return INIT_SUCCEEDED;
}
// 注文時に自動ロギング
void OnTradeTransaction(const MqlTradeTransaction& trans) {
if (trans.type == TRADE_TRANSACTION_ORDER_ADD) {
// 非同期でVCPログを送信(取引に影響なし)
VCP_LogOrder(trans.order, trans.symbol, trans.volume);
}
}
統合パターン詳細
パターンA: サイドカー統合
取引プラットフォームのコアエンジンを修正せず、外部プロセスとして並行稼働
データフロー
- トレーダーの端末で注文発生
- ブリッジEAがイベント検知、UUID生成
- JSONペイロードを構築し署名
- VeritasChain Cloud (VCC)へ非同期送信
メリット
- • ブローカーのインフラに依存しない
- • 独立した監査ログを生成
- • データ改ざんの検知が可能
パターンB: カーネルバイパス
OSネットワークスタックをバイパスし、NICから直接データアクセス
技術詳細
- SBE (Simple Binary Encoding)
- ゼロコピー・シリアライゼーション
- ロックフリー・リングバッファ
- PTCハードウェアクロック連携
HFT向け最適化
マイクロ秒を争うHFT環境で、ロギング処理が取引スレッドをブロックしないよう設計。 Platinum Tier専用の超低レイテンシ実装。
パターンC: シャドーロギング
既存システムと並行してVCPログを生成(移行初期フェーズ)
段階的移行プロセス
シャドーロギング
既存システムと並行稼働、本番に影響なし
ハイブリッド運用
内部監査・紛争解決でVCPログを参照開始
完全移行
VCPチェーンを正本(Golden Source)として指定
パターンD: VeritasChain Cloud (VCC)
SaaS型ソリューション:自社ノード不要でVCP準拠を実現
VCC の特徴
- インフラ管理不要
- REST API経由でログ送信
- 自動アンカリング・検証
- ダッシュボード・Explorer提供
# VCC API 使用例
curl -X POST https://api.veritaschain.cloud/v1/events \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"event_type": "ORDER_ACCEPTED",
"symbol": "BTCUSD",
"side": "BUY",
"quantity": "0.5",
"price": "45000.00"
}'
実装コード例
Python: バックテスト監査の実装
#!/usr/bin/env python3
"""
VCP Backtest Audit Logger
バックテストの全取引を監査可能な形式で記録
"""
from vcp import VCPLogger, Tier, EventType
from datetime import datetime
import uuid
# ロガー初期化(Silver Tier、テスト環境向け)
logger = VCPLogger(
tier=Tier.SILVER,
private_key_path="./test_key.pem",
output_dir="./vcp_audit_logs/"
)
# バックテストの取引イベントをロギング
def log_backtest_trade(symbol, side, quantity, price, timestamp):
"""
バックテスト取引をVCP形式でログ
Args:
symbol: 通貨ペア (例: "EURUSD")
side: BUY / SELL
quantity: 数量(String型で精度維持)
price: 価格(String型で精度維持)
timestamp: 取引時刻
"""
event_id = str(uuid.uuid7()) # UUID v7で時系列ソート可能
logger.log_event(
event_id=event_id,
event_type=EventType.ORDER_ACCEPTED,
timestamp=timestamp,
payload={
"symbol": symbol,
"side": side,
"quantity": str(quantity), # 必ずString型
"price": str(price), # 必ずString型
"backtest": True,
"strategy": "mean_reversion_v2"
}
)
# 使用例
if __name__ == "__main__":
# バックテストループ
trades = [
("EURUSD", "BUY", "100000", "1.08450", datetime.now()),
("GBPUSD", "SELL", "50000", "1.26320", datetime.now()),
]
for symbol, side, qty, price, ts in trades:
log_backtest_trade(symbol, side, qty, price, ts)
# VCPチェーンを検証
if logger.verify_chain():
print("✓ バックテストログの整合性確認完了")
logger.export_json("backtest_audit_2024.json")
else:
print("✗ チェーン整合性エラー検出")
C++: HFT向け超低レイテンシ実装
/**
* VCP Platinum Tier Logger for HFT
* マイクロ秒レベルの低レイテンシ実装
*/
#include <vcp/platinum.hpp>
#include <vcp/sbe_encoder.hpp>
#include <vcp/ptp_clock.hpp>
class HFTVCPLogger {
private:
vcp::PlatinumLogger logger_;
vcp::PTPClock ptp_clock_;
vcp::SBEEncoder encoder_;
vcp::RingBuffer<vcp::TradeEvent, 65536> event_buffer_;
public:
HFTVCPLogger()
: logger_(vcp::ClockSource::PTP_HARDWARE, vcp::Encoding::SBE),
ptp_clock_("/dev/ptp0"),
encoder_(),
event_buffer_() {
// ロックフリー・リングバッファで非同期ロギング
logger_.set_async_mode(true);
}
// 注文受付イベントをナノ秒精度でログ
inline void log_order_accepted(
uint64_t order_id,
const char* symbol,
Side side,
const char* quantity,
const char* price
) {
// PTCハードウェアクロックから直接タイムスタンプ取得
uint64_t timestamp_ns = ptp_clock_.now_ns();
// SBEでゼロコピー・エンコーディング
vcp::TradeEvent event;
event.event_id = vcp::uuid_v7_generate(timestamp_ns);
event.event_type = vcp::EventType::ORDER_ACCEPTED;
event.timestamp_ns = timestamp_ns;
event.order_id = order_id;
std::strncpy(event.symbol, symbol, sizeof(event.symbol));
event.side = side;
std::strncpy(event.quantity, quantity, sizeof(event.quantity));
std::strncpy(event.price, price, sizeof(event.price));
// リングバッファにプッシュ(ロックフリー、取引スレッドをブロックしない)
event_buffer_.push(event);
}
// バックグラウンドスレッドで定期的にフラッシュ
void async_flush_worker() {
while (running_) {
vcp::TradeEvent event;
if (event_buffer_.pop(event)) {
logger_.write_event(event);
}
}
}
};
// 使用例
int main() {
HFTVCPLogger vcp_logger;
// 取引エンジンのコールバック
trading_engine.on_order_accepted([&](const Order& order) {
// 1マイクロ秒未満のオーバーヘッド
vcp_logger.log_order_accepted(
order.id,
order.symbol.c_str(),
order.side,
order.quantity_str.c_str(),
order.price_str.c_str()
);
});
return 0;
}
MQL5: MT5向けクライアントサイド署名EA
//+------------------------------------------------------------------+
//| VCP_ClientLogger.mq5 |
//| VeritasChain Standards Org |
//| https://veritaschain.org |
//+------------------------------------------------------------------+
#property copyright "VeritasChain Standards Organization"
#property link "https://veritaschain.org"
#property version "1.00"
#include <VCP_Bridge.mqh>
// グローバル変数
CVCPBridge vcp;
string private_key = "your_private_key_here"; // 本番では暗号化ストレージから取得
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit() {
// VCP Bridge初期化(Silver Tier、クライアントサイド署名)
if (!vcp.Init(TIER_SILVER, private_key)) {
Print("VCP初期化エラー");
return INIT_FAILED;
}
Print("VCP Logger初期化完了 (Silver Tier)");
Print("クライアントサイド署名モード: ブローカー非依存");
return INIT_SUCCEEDED;
}
//+------------------------------------------------------------------+
//| Trade transaction event handler |
//+------------------------------------------------------------------+
void OnTradeTransaction(
const MqlTradeTransaction& trans,
const MqlTradeRequest& request,
const MqlTradeResult& result
) {
// 注文が追加された時
if (trans.type == TRADE_TRANSACTION_ORDER_ADD) {
LogOrderAccepted(trans, request);
}
// 注文が執行された時
if (trans.type == TRADE_TRANSACTION_DEAL_ADD) {
LogOrderExecuted(trans, result);
}
}
//+------------------------------------------------------------------+
//| 注文受付をVCPログに記録 |
//+------------------------------------------------------------------+
void LogOrderAccepted(
const MqlTradeTransaction& trans,
const MqlTradeRequest& request
) {
// VCPイベント構築
VCPEvent event;
event.event_id = vcp.GenerateUUIDv7(); // UUID v7生成
event.event_type = "ORDER_ACCEPTED";
event.timestamp = TimeGMT();
// ペイロード(JSON形式)
string payload = StringFormat(
"{\"symbol\":\"%s\",\"side\":\"%s\",\"quantity\":\"%s\",\"price\":\"%s\",\"order_id\":%I64d}",
trans.symbol,
(trans.order_type == ORDER_TYPE_BUY || trans.order_type == ORDER_TYPE_BUY_LIMIT) ? "BUY" : "SELL",
DoubleToString(trans.volume, 2), // String型に変換(精度維持)
DoubleToString(trans.price, _Digits), // String型に変換
trans.order
);
event.payload = payload;
// クライアントサイドで署名してVCCに送信
if (vcp.SendEventAsync(event)) {
Print("✓ VCPログ送信成功: ", event.event_id);
} else {
Print("✗ VCPログ送信失敗(リトライキューに追加)");
}
}
//+------------------------------------------------------------------+
//| 注文執行をVCPログに記録 |
//+------------------------------------------------------------------+
void LogOrderExecuted(
const MqlTradeTransaction& trans,
const MqlTradeResult& result
) {
VCPEvent event;
event.event_id = vcp.GenerateUUIDv7();
event.event_type = "ORDER_EXECUTED";
event.timestamp = TimeGMT();
string payload = StringFormat(
"{\"deal_id\":%I64d,\"order_id\":%I64d,\"symbol\":\"%s\",\"volume\":\"%s\",\"price\":\"%s\"}",
trans.deal,
trans.order,
trans.symbol,
DoubleToString(trans.volume, 2),
DoubleToString(trans.price, _Digits)
);
event.payload = payload;
vcp.SendEventAsync(event);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
// 未送信のイベントをフラッシュ
vcp.FlushPendingEvents();
Print("VCP Logger停止");
}
GitHubリポジトリ
技術サポートが必要ですか?
統合に関するご質問、PoC支援、エンタープライズ導入のご相談はお気軽にお問い合わせください