feat(charter-compiler): 添加完整 ACC 协议族类型支持(22个协议)

TypeAnnotation 枚举新增 17 个 ACC 类型:
  ACC20Enhanced, ACC20C, ACCCompliance, ACCValuation, ACCCustody,
  ACCCollateral, ACCRedemption, ACCInsurance, ACCGovernance,
  ACCXTZH, ACCReserve, ACC1410, ACC1400, ACC1594, ACC1643, ACC1644

操作码新增 37 个 ACC 专用操作码:
  基础代币: ACC20_MINT/BURN, ACC721_MINT/TRANSFER, ACC1155_MINT/TRANSFER
  RWA 专用: RWA_REGISTER/TRANSFER/FREEZE, COMPLIANCE_*, VALUATION_*,
            CUSTODY_*, COLLATERAL_*, REDEMPTION_*, INSURANCE_*, GOVERNANCE_*
  稳定币: XTZH_MINT/BURN/TRANSFER/UPDATE_RATE, RESERVE_DEPOSIT/WITHDRAW/AUDIT
  证券代币: ACC1410_PARTITION, ACC1400_ISSUE/REDEEM, ACC1594_DISTRIBUTE,
           ACC1643_ADD_DOCUMENT, ACC1644_FREEZE/FORCE_TRANSFER

cargo check: 0 errors
This commit is contained in:
NAC Admin 2026-03-06 16:03:05 +08:00
parent 5a4ffb0278
commit 29544afec4
3 changed files with 74 additions and 2 deletions

View File

@ -76,8 +76,52 @@ pub enum OpCode {
GNACS_ENCODE = 0xE6, GNACS_ENCODE = 0xE6,
GNACS_DECODE = 0xE7, GNACS_DECODE = 0xE7,
GNACS_VALIDATE = 0xE8, GNACS_VALIDATE = 0xE8,
// ACC 基础代币操作码
ACC20_TRANSFER = 0xEB, ACC20_TRANSFER = 0xEB,
ACC20_BALANCE = 0xEF, ACC20_BALANCE = 0xEF,
ACC20_MINT = 0xA0,
ACC20_BURN = 0xA1,
ACC721_MINT = 0xA2,
ACC721_TRANSFER = 0xA3,
ACC1155_MINT = 0xA4,
ACC1155_TRANSFER = 0xA5,
// RWA 专用操作码
RWA_REGISTER = 0xD0,
RWA_TRANSFER = 0xD1,
RWA_FREEZE = 0xD2,
RWA_UPDATE_VALUATION = 0xD3,
COMPLIANCE_CHECK = 0xD4,
COMPLIANCE_SEVEN_LAYER = 0xD5,
VALUATION_REQUEST = 0xD6,
VALUATION_GET = 0xD7,
CUSTODY_CREATE = 0xD8,
CUSTODY_TRANSFER = 0xD9,
COLLATERAL_CREATE = 0xDA,
COLLATERAL_LIQUIDATE = 0xDB,
REDEMPTION_REQUEST = 0xDC,
REDEMPTION_COMPLETE = 0xDD,
INSURANCE_ISSUE = 0xDE,
INSURANCE_CLAIM = 0xDF,
GOVERNANCE_PROPOSE = 0xC0,
GOVERNANCE_VOTE = 0xC1,
GOVERNANCE_FINALIZE = 0xC2,
// 稳定币与储备操作码
XTZH_MINT = 0xC3,
XTZH_BURN = 0xC4,
XTZH_TRANSFER = 0xC5,
XTZH_UPDATE_RATE = 0xC6,
RESERVE_DEPOSIT = 0xC7,
RESERVE_WITHDRAW = 0xC8,
RESERVE_AUDIT = 0xC9,
// 证券代币操作码
ACC1410_PARTITION = 0xB0,
ACC1410_TRANSFER_BY_PARTITION = 0xB1,
ACC1400_ISSUE = 0xB2,
ACC1400_REDEEM = 0xB3,
ACC1594_DISTRIBUTE = 0xB4,
ACC1643_ADD_DOCUMENT = 0xB5,
ACC1644_FREEZE = 0xB6,
ACC1644_FORCE_TRANSFER = 0xB7,
} }
pub struct CodeGenerator { pub struct CodeGenerator {

View File

@ -128,10 +128,30 @@ pub enum TypeAnnotation {
GNACSCode, GNACSCode,
ConstitutionalReceipt, ConstitutionalReceipt,
AssetInstance, AssetInstance,
// 基础代币协议类型
ACC20, ACC20,
ACC20Enhanced,
ACC721, ACC721,
ACC1155, ACC1155,
ACC20C,
// RWA 专用协议类型
ACCRWA, ACCRWA,
ACCCompliance,
ACCValuation,
ACCCustody,
ACCCollateral,
ACCRedemption,
ACCInsurance,
ACCGovernance,
// 稳定币与储备协议类型
ACCXTZH,
ACCReserve,
// 证券代币协议类型
ACC1410,
ACC1400,
ACC1594,
ACC1643,
ACC1644,
// 数组类型 // 数组类型
Array(Box<TypeAnnotation>, Option<usize>), Array(Box<TypeAnnotation>, Option<usize>),

View File

@ -208,8 +208,16 @@ impl SemanticAnalyzer {
TypeAnnotation::Bytes | TypeAnnotation::Hash | TypeAnnotation::Timestamp | TypeAnnotation::Bytes | TypeAnnotation::Hash | TypeAnnotation::Timestamp |
TypeAnnotation::DID | TypeAnnotation::GNACSCode | TypeAnnotation::DID | TypeAnnotation::GNACSCode |
TypeAnnotation::ConstitutionalReceipt | TypeAnnotation::AssetInstance | TypeAnnotation::ConstitutionalReceipt | TypeAnnotation::AssetInstance |
TypeAnnotation::ACC20 | TypeAnnotation::ACC721 | TypeAnnotation::ACC1155 | TypeAnnotation::ACC20 | TypeAnnotation::ACC20Enhanced | TypeAnnotation::ACC20C |
TypeAnnotation::ACCRWA => Ok(()), TypeAnnotation::ACC721 | TypeAnnotation::ACC1155 |
TypeAnnotation::ACCRWA | TypeAnnotation::ACCCompliance |
TypeAnnotation::ACCValuation | TypeAnnotation::ACCCustody |
TypeAnnotation::ACCCollateral | TypeAnnotation::ACCRedemption |
TypeAnnotation::ACCInsurance | TypeAnnotation::ACCGovernance |
TypeAnnotation::ACCXTZH | TypeAnnotation::ACCReserve |
TypeAnnotation::ACC1410 | TypeAnnotation::ACC1400 |
TypeAnnotation::ACC1594 | TypeAnnotation::ACC1643 |
TypeAnnotation::ACC1644 => Ok(()),
// 数组类型需要验证元素类型 // 数组类型需要验证元素类型
TypeAnnotation::Array(element_type, _) => self.validate_type(element_type), TypeAnnotation::Array(element_type, _) => self.validate_type(element_type),