メインコンテンツまでスキップ

ERC-3643 プロトコル紹介

目次

  1. 概要
  2. 5つの中核概念
  3. コントラクト全体構成
  4. コントラクトの責務とオンチェーン状態
  5. コントラクト間の連携
  6. 権限とマルチシグ
  7. 調査・デモの結論
  8. セキュリティ境界
  9. 用語集

1. 概要

ERC-3643は、本人確認とコンプライアンス検査を備えたERC-20発行フレームワークです。トークンを保有できる主体、送金の可否、権限者による凍結・強制移転・資産回復、一貫した実装アップグレードを定義します。

観点通常のERC-20ERC-3643
受取可能者任意のアドレス検証済みIDのみ
送金ビジネスルールによる拒否不可コンプライアンスモジュールが拒否可能
凍結・強制移転・ウォレット回復利用不可利用可能
ルール変更通常は別コントラクトが必要設定またはモジュールを変更

2. 5つの中核概念

概念意味
ONCHAINIDウォレットから独立したオンチェーンのユーザーID。1つのIDに複数ウォレットを紐付け可能
ClaimIDに付与される署名済み資格証明
Claim 発行者Claimの発行・失効権限を持つ機関コントラクト
Identity Registryアドレスが適格投資家に属するかを判定する「人」の検査
Compliance module取引がルールに従うかを判定する「取引」の検査

両方のゲートを通過する必要があります。KYC承認済みの投資家でも、保有上限などのコンプライアンスルールにより拒否される場合があります。


3. コントラクト全体構成

3.1 4つのレイヤー

レイヤーインスタンス数目的
プラットフォーム通常はチェーンごとに1つ発行アクセス、ID作成、共通アップグレード
Suite資産ごとに6コントラクト残高、ID、コンプライアンス、ガバナンス
ONCHAINIDユーザーごとに1つキーとClaim
コンプライアンスモジュールルール単位でデプロイし再利用実行可能な取引ルール

各責務を独立して進化させるため、コントラクトは分離されています。Tokenは台帳、IR・IRS・CTR・TIRは本人資格、MCは取引ルールを管理します。Proxyアドレスは固定されます。 Proxyが状態を保持し、実装がロジックを提供します。

3.2 3つのアップグレード方式

対象方式アップグレード入口影響範囲
6つのTREXコントラクトIA参照ProxyTREX IAそのIAを参照し続ける資産
ONCHAINIDONCHAINID IAupdateImplementationそのIAを参照するID
コンプライアンスモジュールERC1967 + UUPSモジュールOwnerのupgradeToそのモジュールに紐付く資産

4. コントラクトの責務とオンチェーン状態

チェーンには業務状態とルール設定を保存します。本人確認書類の画像、氏名、ID番号などの機微情報はオフチェーンKYCシステムに保持します。チェーンには資格種別、保有状況、送金適格性などの判定結果を記録します。

4.1 チェーン共通プラットフォームコントラクト

コントラクト目的主なオンチェーン状態重要な上限
TREXImplementationAuthorityRWA資産が使用する実装バージョンを選択現在のバージョンと各バージョンの6実装アドレス6実装を一括登録する必要あり
IAFactory資産専用の独立アップグレード管理機関を作成独立管理機関を付与した資産グローバル管理機関の管理者のみ作成可能
TREXFactory完全なRWA Suiteをデプロイ・初期化使用済みsalt、管理機関、IDファクトリー、許可済みデプロイヤー初期設定はTopic・発行者・Agentが各最大5、モジュール操作が30
TREXGateway発行者、公開発行、手数料、割引を管理公開設定、手数料トークン・金額・受取先、発行者一覧、割引、管理者1バッチ最大5 Suite
IdFactoryオンチェーンIDプロファイルとウォレット対応関係を作成ウォレット→IDおよびID→ウォレットの対応1 IDあたり最大101ウォレット
ONCHAINID ImplementationAuthorityID実装バージョンを選択現在の実装とアップグレード管理機関変更は参照中の全IDに影響
ONCHAINID Gatewayプラットフォーム承認署名によりユーザーがIDを作成可能承認済み署名者と失効済み署名通常はデモの主要フロー外

4.2 RWA資産ごとの6つの中核コントラクト

コントラクト目的主なオンチェーン状態重要な上限
Token台帳、送金、Mint、Burn、一時停止、凍結、強制移転、ウォレット回復残高、Allowance、供給量、メタデータ、停止状態、全体・部分凍結、接続先IR/MC、Owner、Agentdecimalsは0〜18
IdentityRegistry送金・Mint前に受取人の適格性を確認CTR・TIR・IRSへの参照とRegistry管理者要件と発行者が増えるほどGasコスト増加
IdentityRegistryStorageウォレットのIDと国を保存し、共有可能ウォレット→ID・国、およびストレージを使うRegistry最大300 IdentityRegistry、ウォレットごとに1レコード
ClaimTopicsRegistry資産保有に必要な資格を定義必須Topicと管理者一意なTopicは最大15
TrustedIssuersRegistry承認する発行者と許可Topicを定義発行者と資格種別発行者は最大50、各発行者のTopicは最大15
ModularCompliance金額、国、ロックアップなどの取引ルールを適用紐付くToken、接続済みモジュール、管理者Token 1つ、モジュール最大25

4.3 ユーザーIDとルールモジュール

コントラクト目的主なオンチェーン状態
ONCHAINID / Identity1人につき1つの再利用可能なオンチェーンID。ウォレットは交換可能な手段Management・Action・Claimキーと受領済みClaim
ClaimIssuer証明を発行・失効するKYC/AML機関コントラクトIDキーと失効済み署名
ModuleProxy1つの業務ルールに対する固定の入口現在の実装と資産別パラメータ

ソース配置:プラットフォームコントラクトはcontracts/factory/proxy/authority/、資産コントラクトはtoken/registry/compliance/modular/、ID機能は@onchain-id/solidityにあります。


5. コントラクト間の連携

5.1 依存関係

5.3 発行

Gatewayのsaltには通常、Ownerアドレスの16進表現とToken名を連結した値を使います。手数料を有効にする場合は、先に手数料トークンをapproveします。

5.4 投資家オンボーディング:ID、KYC署名、オンチェーンClaim

オンボーディングはIDコントラクト作成、資格署名、Claim送信、資産側登録の4段階です。各段階を明確に区別します。

  1. ONCHAINIDの作成はオンチェーントランザクションであり、投資家のIDコントラクトをデプロイします。
  2. ClaimSignerによるKYC署名はオフチェーンであり、トランザクションもGasコストも発生しません。
  3. addClaimはオンチェーントランザクションであり、ClaimSigner署名とKYC判定を投資家のONCHAINIDに保存します。

5.4.1 本番フロー:ONCHAINID GatewayによるセルフサービスID作成

IdFactory.createIdentityonlyOwnerです。投資家からFactoryへの直接呼出しは許可されません。本番では公式Gateway.solをデプロイし、IdFactoryの所有権を移して、投資家がGateway.deployIdentityForWallet(investor)を呼び出す構成にします。GatewayがOwnerとしてIdFactory.createIdentityを呼び、投資家がトランザクション送信者としてGasを負担します。

5.4.2 ステップ別の呼出元とGas負担者

手順操作実行者オンチェーンGas負担者備考
1KYC審査投資家と審査システムいいえなし平文の個人情報はオフチェーンに保持
2ONCHAINID作成投資家がGateway.deployIdentityForWalletを呼出しはい投資家GatewayがIdFactory.createIdentityを呼出し
3KYC署名ClaimSignerがhash(identity, topic, data)に署名いいえなしEOA/HSM/MPC署名。トランザクションではない
4KYC Claim送信投資家がIdentity.addClaimを呼出しはい投資家コントラクトがClaimIssuer.isClaimValidを呼出し
5資産への登録IR AgentがIdentityRegistry.registerIdentityを呼出しはいIR AgentSuiteにウォレット、ID、国を記録
6結果確認誰でもIdentityRegistry.isVerifiedを呼出し可能いいえ(view)なしMintまたは送金受取前にtrueが必要

5.4.3 ClaimSignerのKYC署名はオンチェーンか

署名自体はオフチェーンで生成します。

digest = keccak256(abi.encode(identity, topic, data))
signature = ClaimSigner.signMessage(digest)

続くaddClaimトランザクションが次の引数を保存します。

Identity.addClaim(
topic,
1,
claim発行者,
signature,
data,
uri
)

投資家がaddClaimを送信すると、IDコントラクトがClaimIssuer.isClaimValid(...)を呼び出し、信頼済み発行者、登録済みClaimキー由来の署名、未失効の署名、必須Topicを検証します。信頼の根拠はClaimSignerの署名であり、addClaimの送信者には依存しません。

5.5 送金・Mint・Burnの判定表

Operation呼出元Paused checkFreeze checkIdentity checkCompliance checkAuto-unfreeze
送金 / 委任送金保有者 / 承認済み支出者あり双方受取人ありなし
MintAgentなしなし受取人ありなし
BurnAgentなしなしなしなしあり
強制移転Agentなしなし受取人なしtransferredは呼出しあり
ウォレット回復Agentなしなし強制移転を使用なしあり

ゲート1は受取人だけを検証します。一時停止中も管理操作は実行できます。強制移転はcanTransferを省略し、部分凍結はAgentの操作を妨げません。

5.7 アップグレード連携

対象呼出しチェーン影響
TREX contractsIA owner → addTREXVersionuseTREXVersion基準IAを参照するProxy
Detach one asset同一アドレスが6つすべてを所有 → changeImplementationAuthority対象資産のみ
ONCHAINIDOID IA owner → updateImplementation参照中の全ID
Compliance moduleModule owner → upgradeToそのモジュールに紐付くMC

6. 権限とマルチシグ

6.1 4つの権限モデル

モデル認可用途Safe対応
Ownermsg.sender == ownerガバナンス、コンポーネント交換、アップグレード、ルール対応、EOA制限なし
AgentAgent list頻繁なMint・凍結・登録操作技術的には対応。高頻度操作ごとのマルチシグは非効率
onlyToken / onlyComplianceCall紐付け済みコントラクトアドレス自動Callbackとパラメータ転送人が操作するアカウントではない
ONCHAINID KeyPurpose別のkeccak256(address)キー管理、外部呼出し、ClaimSafeはActionキーを管理可能。Claimのネイティブ署名は不可

ネイティブTimelockはありません。transferOwnershipで所有権をSafeに割り当てられます。renounceOwnershipはOwnerを恒久的に削除するため、本番環境では実行防止策が必要です。

6.2 権限マトリクス

コントラクトロール重要な権限Safe推奨構成
TREX IA / ONCHAINID IAOwnerグローバルアップグレード最高セキュリティのSafe + Timelock
TREXFactoryOwnerSuiteのデプロイとFactory所有コントラクトの回収通常はGatewayが所有
TREXGatewayOwner / Agentアクセス、手数料、Factory所有権、デプロイヤーOwner → Safe、Agent → サービスアカウント
TokenOwner / AgentIR/MC交換、Agent管理、Mint、Burn、凍結、強制移転、回復Owner → Safe、Agentの職務を分離
IROwner / AgentCTR/TIR/IRS交換と投資家登録管理Owner → Safe、Agent → KYCアカウント
IRSOwner / AgentIR紐付けとIDマスターデータ書込み先に所有権モデルを確立
CTR / TIR / MCOwnerTopic、発行者、モジュール、パラメータコンプライアンスSafe + Timelock
Upgradeable ModuleModule ownerUUPSアップグレードSafe + Timelock
IdFactoryOwnerID作成プラットフォームSafe
IdentityManagement/action/Claim keysキー管理、呼出し実行、Claim管理SafeがManagement/Actionキーを保有可能
ClaimIssuerManagement + Claim keys失効と発行Management → Safe、発行 → EOA/HSM/MPC

6.3 Safeに関する結論

Safeを直接利用できる対象: Suite・プラットフォームのOwner、モジュールアップグレードOwner、ONCHAINIDのManagement/Actionキー、および同じSafeが6コントラクトを所有する場合の資産別IA交換。

SafeはClaimをネイティブ署名できません。 検証にEOAを復元するecrecoverを使います。発行者管理にはSafe、Purpose 3署名には独立した署名者を使用します。

高頻度操作には権限を制限したサービスアカウントを使用します。 投資家登録、定常的なMint/Burn、デプロイヤー保守、緊急停止・凍結、強制移転、回復が対象です。オフチェーン承認とアラートを適用し、重大リスクには二重承認または専用マルチシグを使います。

6.4 推奨レイヤーと3つの注意点

  1. IRSの所有権は他の5コントラクトと同時には移転されません。 recoverContractOwnershipを呼ぶまでFactoryに残り、通常そのFactoryはGatewayが所有します。
  2. 1資産のIA変更には、6つすべてのowner()が同じmsg.senderである必要があります。 分離したSafeから個別承認する構成には対応しません。
  3. SafeとTimelockは異なる統制を提供します。 グローバルアップグレード、IR/MC交換、Topic・発行者・モジュール変更には外部実行遅延が必要です。

7. 調査・デモの結論

結論コード上の事実
Topicに固定番号はない1=KYCのハードコードはなく、デモはkeccak256("KYC_APPROVED")を使用。チェーン共通Topic台帳が必要
IdentityはBeaconではないONCHAINIDはnpm 2.2.1のImplementationAuthorityを使用
本番用コンプライアンスモジュールが不足未監査のDemoCountryAllowlistModuleTestModuleのみ。旧機能はデプロイ可能モジュールではない
送金入口投資家はTokenを直接呼び出し、IdentityProxy.executeは不要
国コードuint16のISO 3166-1数値(156、702など)。デモモジュールは受取人のみ確認
モジュールパラメータMCアドレスごとに分離され、1モジュールを複数資産で利用可能
ID再利用発行者共有でKYC重複を回避。IRS共有は再利用性とともにガバナンス範囲を拡大
依存バージョンpackage.json^2.0.0、インストール済みは2.2.1。本番バージョンを固定する

デモ後のカスタムモジュール優先順位:国別アクセス、保有者別上限、総供給上限、保有者数 → ロックアップ、投資家区分、金額制限 → 条件付き送金、取引場所制限。

KYC/AML発行者とモジュールパラメータはオンチェーン設定に直結します。カストディ、監査、法定通貨レールは主に承認フローへ影響します。Claimのdataに平文PIIを保存しないでください。


8. セキュリティ境界

  • Owner、Agent、IA、ClaimIssuerの侵害は資産や適格性を直接変更し得ます。長期保有するOwner署名者とAgent署名者を分離します。
  • 強制移転とBurnは自動的に凍結解除する場合があります。一時停止中も管理操作は実行されます。
  • 信頼済み発行者の削除やTopicの全消去は、多数ユーザーの適格性を同時に変更します。
  • グローバルIAアップグレードは影響範囲が広く、マルチシグ、Timelock、ストレージレイアウト検証、ロールバック演習が必要です。
  • コントラクトだけでは裏付資産の真正性、法的権利、償還、法域横断の適法性を確定できません。別のルールマトリクスで定義します。

9. 用語集

用語意味
T-REX / SuiteERC-3643参照実装 / 1資産を構成する6つの業務コントラクト
ONCHAINID / Claim / Topic / 発行者IDコントラクト / 資格証明 / 証明種別 / 発行機関
IR / IRS / CTR / TIR / MCIDレジストリ / IDストレージ / Topicレジストリ / 発行者レジストリ / コンプライアンス調整役
Owner / Agent設定ガバナンス権限 / 運用権限
Implementation Authority現在のProxy実装を選択するバージョン管理機関
TREXFactory / Gateway / IdFactory資産ファクトリー / 発行アクセスGateway / IDファクトリー