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

05 · コントラクトインターフェースとイベント

本章は、発行、オンボーディング、mint、transfer、burn をコントラクトメソッドへ対応付ける実装リファレンスです。

5.1 最初に正しいコントラクトを特定する

外部アプリケーションが Suite 全体へ直接接続する必要はありません。対象資産の Token プロキシアドレスから開始します。

推奨探索順序:

  1. 公開アドレス表から対象環境の Token プロキシアドレスを取得。
  2. Token.identityRegistry() で資産 Registry を取得。
  3. Token.compliance() でコンプライアンス入口を取得。
  4. IdFactory.getIdentity(wallet) でウォレットの ONCHAINID を取得。
  5. オンチェーン結果を公開設定と比較し、実装アドレスを業務入口に使用しない。

5.2 権限早見表

呼出者主な write メソッド説明
任意のユーザーまたはアプリすべての viewread-only。トランザクションとユーザー gas は不要
Token 保有者transfer, approve, transferFromID、pause、freeze、ルール検査が適用
投資家 ID 管理ウォレットdeployIdentityForWallet, addClaim自分の ONCHAINID を作成・管理
IR AgentregisterIdentity, updateIdentity, updateCountry, deleteIdentity1 資産の投資家登録を管理
Token Agentmint, burn, pause, unpause, freeze、強制移転、復旧資産管理操作
Contract OwnerRegistry、Compliance、ガバナンス設定の変更通常アプリ統合の範囲外

操作表示前に現在のウォレットロールを識別してください。フロントエンドのボタン非表示はオンチェーン権限制御の代替になりません。

5.3 Token

主な read メソッド

メソッド戻り値用途
name() / symbol()string資産名・シンボル表示
decimals()uint8金額変換
totalSupply()uint256現在の総供給量
balanceOf(wallet)uint256ウォレット総残高
identityRegistry()address資産適格性 Registry
compliance()addressコンプライアンス入口
paused()bool通常 transfer の pause 状態
isFrozen(wallet)boolウォレット全体の freeze 状態
getFrozenTokens(wallet)uint256一部 freeze 数量
availableBalance = balanceOf(wallet) - getFrozenTokens(wallet)

保有者 write メソッド

メソッド用途主な前提
transfer(to, amount)直接 transferToken 稼働、wallet 状態許可、受取人適格、ルール合格
approve(spender, amount)allowance 設定保有者署名
transferFrom(from, to, amount)allowance を使う transferallowance、残高、適格性、ルール合格

Token Agent メソッド

メソッド用途主な結果
mint(to, amount)MintTransfer(0x0, to, amount)
burn(wallet, amount)BurnTransfer(wallet, 0x0, amount)
pause() / unpause()通常 transfer の停止・有効化Paused / Unpaused
setAddressFrozen(wallet, frozen)ウォレット全体を freeze / 解除AddressFrozen
freezePartialTokens(wallet, amount)残高の一部を freezeTokensFrozen
unfreezePartialTokens(wallet, amount)一部 freeze を解除TokensUnfrozen
forcedTransfer(from, to, amount)管理者による強制移転Transfer
recoveryAddress(lost, new, identity)新ウォレットへ資産復旧RecoverySuccessTransfer

すべての amount は最小単位の整数です。バッチは block gas limit に達し得るため分割し、各トランザクションを個別追跡します。

操作pause 中に停止受取人適格性canTransferfreeze 残高
transfer / transferFromはい検査検査freeze 数量は移転不可
mintいいえ検査検査対象外
burnいいえ非検査非検査Agent が解除を要する場合あり
forcedTransferいいえ検査非検査Agent が解除を要する場合あり
recoveryAddressいいえ復旧フロー規則非検査freeze 状態を移行可能

pause は主に通常の保有者 transfer を制限し、Agent の mint、burn、強制移転、ウォレット復旧は停止しません。

5.4 IdentityRegistry

対象 Token の identityRegistry() からアドレスを取得します。

主な read メソッド

メソッド意味
contains(wallet)登録レコードの有無
isVerified(wallet)現行要件をすべて満たすか
identity(wallet)登録済み ONCHAINID
investorCountry(wallet)登録済み国・地域コード
topicsRegistry()必須 Claim Topics の Registry
issuersRegistry()承認 ClaimIssuers の Registry

contains == true は登録だけを示し、isVerified == true の代わりになりません。

IR Agent メソッド

メソッド用途イベント
registerIdentity(wallet, identity, country)初回登録IdentityRegistered
updateIdentity(wallet, identity)関連 ID 置換IdentityUpdated
updateCountry(wallet, country)国・地域コード更新CountryUpdated
deleteIdentity(wallet)資産から登録削除IdentityRemoved

1 つの ONCHAINID は複数資産から参照できますが、各資産の IdentityRegistry へ通常は個別登録が必要です。

5.5 ONCHAINID Gateway、IdFactory、Identity

ID を作成または照会

コントラクトメソッド呼出者用途
ONCHAINID GatewaydeployIdentityForWallet(wallet)投資家wallet の決定論的 ONCHAINID を作成
IdFactorygetIdentity(wallet)任意のアプリ関連 ID を照会

作成後に IdFactory は DeployedWalletLinked を発火します。getIdentity(wallet) を再照会し、最終オンチェーン対応を使用します。

Claim メソッド

addClaim(
uint256 topic,
uint256 scheme,
address issuer,
bytes signature,
bytes data,
string uri
) returns (bytes32 claimId)
メソッド用途
getClaim(claimId)1 Claim の全フィールドを取得
getClaimIdsByTopic(topic)Topic の Claim IDs を照会
isClaimValid(identity, topic, signature, data)ClaimIssuer 署名を検証

主要イベントは ClaimAddedClaimChangedClaimRemoved です。ClaimSigner はオフチェーン署名を生成し、ClaimIssuer は署名が属するオンチェーン機関コントラクトです。

5.6 ModularCompliance

canTransfer は Token ではなく ModularCompliance に定義されます。

canTransfer(address from, address to, uint256 amount) view returns (bool)
メソッド用途
canTransfer(from, to, amount)現行ルールによる transfer 事前検査
getModules()紐づくルールモジュール一覧
getTokenBound()紐づく Token
isModuleBound(module)モジュール紐付けを確認

canTransfer == true は照会時点のルール合格を示します。pause、freeze、残高、適格性、ルールは確定前に変化し得るため、レシートが最終判断です。transferredcreateddestroyed は紐づく Token が状態変更を通知する callback で、通常アプリは直接呼び出しません。

5.7 イベント索引

イベント発生元用途
TransferTokenMint、burn、transfer
ApprovalTokenallowance 変更
Paused / UnpausedTokentransfer 状態変更
AddressFrozenTokenwallet 全体の freeze
TokensFrozen / TokensUnfrozenToken一部 freeze 変更
RecoverySuccessTokenwallet 復旧
IdentityRegistered / IdentityRemovedIdentityRegistry登録変更
IdentityUpdated / CountryUpdatedIdentityRegistryID・国変更
ClaimAdded / ClaimChanged / ClaimRemovedONCHAINID適格性証明変更
ModuleAdded / ModuleRemovedModularComplianceルールモジュール変更

イベントは変更を示します。reorg、backfill、長時間オフライン後はコントラクト状態を再読込して照合します。

5.8 最小 ABI

const tokenAbi = [
'function name() view returns (string)',
'function symbol() view returns (string)',
'function decimals() view returns (uint8)',
'function totalSupply() view returns (uint256)',
'function balanceOf(address) view returns (uint256)',
'function identityRegistry() view returns (address)',
'function compliance() view returns (address)',
'function paused() view returns (bool)',
'function isFrozen(address) view returns (bool)',
'function getFrozenTokens(address) view returns (uint256)',
'function transfer(address,uint256) returns (bool)',
'event Transfer(address indexed from,address indexed to,uint256 value)',
];

const identityRegistryAbi = [
'function contains(address) view returns (bool)',
'function isVerified(address) view returns (bool)',
'function identity(address) view returns (address)',
'function investorCountry(address) view returns (uint16)',
'event IdentityRegistered(address indexed investorAddress,address indexed identity)',
];

const complianceAbi = [
'function canTransfer(address,address,uint256) view returns (bool)',
'function getModules() view returns (address[])',
];

実際の write 操作にはデプロイ済みバージョンに一致する公式 ABI を使用し、メソッド名から引数順を推測しないでください。

5.9 推奨呼び出し順序

Chain ID を検証
→ Token.decimals を読み取り
→ paused / isFrozen / getFrozenTokens を読み取り
→ Token.identityRegistry から正しい Registry を取得
→ 受取人 contains / isVerified を照会
→ Token.compliance から Compliance を取得
→ canTransfer
→ estimateGas または static simulation
→ トランザクション送信、レシート待機
→ イベントと最新状態からアプリを更新

次へ:06 · 環境設定と受入検証