# 3. 系统架构

<mark style="color:blue;">**系统**</mark>由<mark style="color:blue;">**股东协议合约**</mark>、<mark style="color:blue;">**管理人合约**</mark>、<mark style="color:blue;">**登记簿合约**</mark>和<mark style="color:blue;">**投资协议合约**</mark>四大类智能合约构成。

<figure><img src="/files/hygtMMpRS7NAPj6Vv3HB" alt=""><figcaption><p>系统架构图</p></figcaption></figure>

<details>

<summary> 📖  <strong>3.1 登记簿合约</strong></summary>

<mark style="color:blue;">**登记簿合约**</mark>定义了股权、质权、期权等权益簿记和股东名册、董事高管名册、股东会纪要、董事会纪要等公司治理文件簿记。 核心功能是定义各类簿记对象的属性构成、数据结构、参数校验算法和逻辑校验算法，以及这些簿记对象增、删、改、查的基础方法和API。

1. **登记簿合约的功能**

用户行权时：

①　<mark style="color:blue;">**登记簿合约**</mark>会根据<mark style="color:blue;">**管理人合约**</mark>的调用指令检索并反馈特定权益的状态值或特定法律行为的历史轨迹信息;

②　<mark style="color:blue;">**管理人合约**</mark>依据上述反馈信息校验行权条件是否成就，或计算相关参数的具体数值;

③　<mark style="color:blue;">**管理人合约**</mark>调用特定的<mark style="color:blue;">**登记簿合约**</mark>修改特定权益的状态值，或者将法律行为的内容、后果或轨迹信息记录下来。

***

例如，董事就职时，需要调用总管理人合约的“董事就职”接口，输入批准其任职的股东会决议编号和拟就任的董事职位编号，然后:

①　<mark style="color:blue;">**总管理人合约**</mark>会向<mark style="color:blue;">**注册中心合约**</mark>查询指令发出账户的用户编号，随后调用<mark style="color:blue;">**董事高管名册管理人合约**</mark>的“董事就职”接口，处理后续“就职”动作；

②　<mark style="color:blue;">**董事高管名册管理人合约**</mark>会首先调用<mark style="color:blue;">**股东会决议登记簿**</mark>，查询并核实该项动议类别是否为批准董事任职，以及是否已获得股东会表决通过；

③　若类别相符且已通过表决，则<mark style="color:blue;">**董事高管名册管理人**</mark>合约会再次调用<mark style="color:blue;">**股东会决议登记簿**</mark>，核实行权用户编号与职位信息中候选人编号是否一致，若一致则将该项动议的状态信息修改为“已执行”；

④　<mark style="color:blue;">**董事高管名册管理人合约**</mark>调取<mark style="color:blue;">**董事高管名册登记簿**</mark>，将用户编号、就职日期记录下来，完成董事就职的法律动作记录。

![](/files/SUD7JA3IpfEVoMSAfbMf)

在上述过程中，<mark style="color:blue;">**股东会纪要合约**</mark>和<mark style="color:blue;">**高管名册合约**</mark>就属于<mark style="color:blue;">**登记簿合约**</mark>，前者根据<mark style="color:blue;">**管理人合约**</mark>的请求反馈动议的类别和表决情况，供<mark style="color:blue;">**管理人合约**</mark>判断行权的先决条件是否成就，后者则进一步核实行权用户与候选人的数字身份一致性，最后由<mark style="color:blue;">**管理人合约**</mark>将用户编号、就职日期等信息写入<mark style="color:blue;">**高管名册合约**</mark>以记录”就职“动作的行为轨迹。

2. #### 登记簿合约的分类

根据簿记信息的类别，登记簿合约可分为<mark style="color:blue;">**权益簿记**</mark>和<mark style="color:blue;">**治理文件簿记**</mark>两大类别，具体包括：

① <mark style="color:blue;">**股东协议登记簿(Register of Constitutions, “ROC”)**</mark>: 跟踪记录所有版本<mark style="color:blue;">**股东协议**</mark>的合约地址、效力状态及创建、审议、表决时间表，可查询并获取当前有效的股东协议，以及已失效的历史版本股东协议；

② <mark style="color:blue;">**董事高管名册(Register of Directors, “ROD”)**</mark>: 簿记所有董事、高管的职位信息，包括任职候选人的用户编号、该高管的提名人、任命高管的动议表决规则、高管就职日期、任职期限届满日等信息，可供系统其他智能合约查阅核实高管身份和职权有效性；

③ <mark style="color:blue;">**董事会纪要(Board Meeting Minutes, “BMM”)**</mark><mark style="color:blue;">:</mark> 簿记提交董事会表决的各项动议信息，包括动议的提案用户、提案时间、表决开始及终止时间、表决投票结果、有效表决票的态度、委托投票安排、决议执行人、决议执行状态等信息，可供系统其他智能合约查阅动议的内容索引、审核状态、流程时间表、提案人、执行人等信息；

④ <mark style="color:blue;">**股东名册(Register of Members, “ROM”)**</mark>: 簿记各股东的持股及表决权情况，包括持有股权的编号、认缴出资总额、实缴出资总额、清洁（无质押、无股转合约安排）实缴出资总额及表决权权重等信息，供查阅核实股东身份、持股编号清单、认缴实缴出资总额、计算表决权总额等信息;

⑤ <mark style="color:blue;">**股东会纪要(General Meeting Minutes, “GMM”)**</mark>: 簿记提交股东会表决的各项动议信息，包括动议的提案人、提案时间、表决开始及终止时间、表决投票结果、有效表决票的态度、委托投票安排、决议执行人、决议执行状态等信息，可供系统其他智能合约查阅动议的内容索引、审核状态、流程时间表、提案人、执行人等信息；

⑥ <mark style="color:blue;">**投资协议登记簿(Register of Agreements, “ROA”)**</mark>：跟踪记录所有股权认购、股权转让等投资协议的合约地址、效力状态及履行时间表，可模拟交易结果并推算交割后公司控制权归属及股权比例情况，方便判断拖售权、随售权等特殊股东权益的行权条件成就情况，可查询获取所有投资协议合约对象；

⑦ <mark style="color:blue;">**期权登记簿(Register of Options, “ROO”)**</mark>：簿记股东协议约定的强买权、强卖权等以股权为标的的期权信息，包括权利人、义务人、行权期开始时间、结束时间、触发条件、行权价格、标的股份类别、标的股份实缴金额等；

⑧ <mark style="color:blue;">**质权登记簿(Register of Pledges, “ROP”)**</mark>：簿记股权出质信息，可查询获取所有股权质押信息，包括债权人、债务人、出质人、质押实缴金额、担保债权金额、债权到期日、担保到期日等；

⑨ <mark style="color:blue;">**股权登记簿(Register of Shares, “ROS”)**</mark>：簿记公司股权信息，可查询获取公司所有已发行的股份信息，包括股东、股份类别、表决权重、发行日期、实缴期限、票面金额、实缴金额、发行价格等；

⑩ <mark style="color:blue;">**股权挂牌交易登记簿(List of Orders, "LOO")**</mark>：簿记以 USDC 结算的股票交易信息，记录标的股份类别、序列号、适格投资人、挂牌出让、集中竞价方式交易的新股发行要约、股权转让要约、股权认购要约、成交交易等信息。

⑪ <mark style="color:blue;">**投资人登记簿(Register of Investors, “ROI”)**</mark>：记录所有有意投资于公司的投资人的信息，包括其用户编号、所属团体的代表人用户编号、注册日期、审核人用户编号、批准日期、注册状态以及身份证明文件的哈希值。

⑫ <mark style="color:blue;">**银行(Bank)**</mark>：由 Circle Internet Financial 部署的 USDC 智能合约的官方地址，该合约自动记录用户的 USDC 余额及交易记录。

⑬ <mark style="color:blue;">**收银台登记簿(Cashier)**</mark>：簿记与公司相关的所有 USDC 支付交易，包括付款人、收款人、付款目的、收付金额、USDC收款授权及其他相关信息。

⑭ <mark style="color:blue;">**赎回登记簿(Register of Redemptions, “ROR”)**</mark>：记录与可赎回基金份额的赎回申请及其执行相关的所有信息，包括但不限于份额类别编号、份额序列号、资产净值（NAV）价格、股东用户编号、实缴金额、以USDC计价的赎回价值，以及相关请求包的序列号。

</details>

<details>

<summary>👨🏻‍✈️ <strong>3.2 管理人合约</strong></summary>

<mark style="color:blue;">**管理人合约**</mark>定义了关于公司治理、股权交易的几十种法律行为的API，以此管理和控制相关法律行为的行为主体、行权条件、行动流程和法律后果。

1. **管理人合约功能**

用户行权时，<mark style="color:blue;">**管理人合约**</mark>会按照特定的法律逻辑调用<mark style="color:blue;">**股东协议合约**</mark>、特定的<mark style="color:blue;">**登记簿合约，**</mark>查询法律行为需要满足哪些前提条件（或后续计算需要依赖哪些中间参数），结合从API接口获取的输入参数，计算并判断行权条件是否成就，或算出中间参数的具体数值；若所有条件均成就，则调用特定的<mark style="color:blue;">**登记簿合约**</mark>来修改特定簿记权益的状态值，或者将特定法律行为的意思表示内容、行为轨迹信息记录下来。

例如，股东表决时，用户需要调用<mark style="color:blue;">**管理人合约**</mark>的“投票表决”API，输入目标动议编号及赞同、反对或弃权的表决态度，然后<mark style="color:blue;">**管理人合约**</mark>会：

① 从<mark style="color:blue;">**股东会决议登记簿合约**</mark>中查询获取该项动议的数据对象；

② 根据动议对象中规定的表决规则编号从<mark style="color:blue;">**股东协议合约**</mark>中查询获取该动议的各类行权期天数；

③ 根据当前区块时间戳判断是否处于表决期；

④ 若处于表决期，则再调用<mark style="color:blue;">**股东名册登记簿合约**</mark>验证用户是否为公司股东；

⑤ 若是股东，则再从动议对象的代理权映射表中获得该股东的表决权受托情况，进而再调取<mark style="color:blue;">**股东名册登记簿合约**</mark>查询获取所有委托股东的表决权权重；

⑥ 最后，将投票人用户编号、表决态度、表决权重、表决时间等信息存储记录在<mark style="color:blue;">**股东会决议登记簿合约**</mark>的动议对象中。

从前例可知，<mark style="color:blue;">**管理人合约**</mark>是各项法律行为行权条件和逻辑流程的控制中枢。为满足EIP170规范的字节码容量要求，系统定义了<mark style="color:blue;">**总管理人**</mark>和多个<mark style="color:blue;">**分项管理人**</mark>两大类智能合约。

2. **总管理人合约**

<mark style="color:blue;">**总管理人合约**</mark>处于公司簿记系统最上层，具备如下核心功能：

①　是公司簿记系统唯一的写操作指令入口，负责将写指令路由到特定的分项簿记管理人合约；

②　同时也是各登记簿合约的地址索引中枢，可根据查询请求反馈特定登记簿合约的账户地址；

③　对外代表公司法人主体，以公司名义完成链上法律行为，例如，签署或执行智能合约、支付代币、行使表决权等；

④　代表公司法人持有ETH、CBP等链上加密资产，根据股东会决议或董事会决议，支付特定金额的加密资产至决议规定的特定账户。

3. <mark style="color:blue;">**分项管理人合约**</mark>

<mark style="color:blue;">**分项管理人合约**</mark>是控制法律行为主体、条件、流程与后果的核心计算层。它们不存储任何状态变量，运行方式类似于库。总管理人合约通过函数选择器（即函数签名的 keccak256 哈希值的前四个字节）识别并检索待调用的相关分项管理人合约的地址，随后通过delegatecall方式调用该分项管理人合约的对应函数。据此，各分项管理人合约函数中定义的具体算法将在总管理人合约的上下文环境中执行，所有计算均针对总管理人合约的状态进行。分项管理人合约具体包括：

①　<mark style="color:blue;">**股东协议登记簿管理人(“ROC Keeper”)**</mark>: 控制股东协议合约的创建、传阅、签署、激活、加入几项法律行为，负责将写指令路由至股东协议登记簿；

②　<mark style="color:blue;">**董事高管名册管理人(“ROD Keeper”)**</mark>: 控制董事和高管的就职、解职、辞职几项法律行为，负责将写指令路由至董事高管名册登记簿；

③　<mark style="color:blue;">**董事会纪要管理人(“BMM Keeper”)**</mark>: 控制董事会动议的创建、提案、委托投票代理人、投票表决、统计表决结果、执行决议等法律动作，其中的动议包括任命及解职高管、审议文件、支付公司持有的代币、调用智能合约几大类别，负责将写指令路由至董事会纪要登记簿；

④　<mark style="color:blue;">**股东名册管理人(“ROM Keeper”)**</mark>: 控制设定股东人数上限、设置实缴出资哈希锁、解锁并提取实缴出资、撤回被锁定的实缴出资、减少注册资本几项法律行为，负责将写指令路由至股东名册和股权登记簿两个登记簿合约；

⑤　<mark style="color:blue;">**股东会纪要管理人(“GMM Keeper”)**</mark>: 控制股东会动议的创建、提案、委托投票代理人、投票表决、统计表决结果、执行决议等法律动作，其中的动议包括任命及解职董事、审议文件、支付代币、调用智能合约几大类别，负责将写指令路由至股东会纪要登记簿；

⑥　<mark style="color:blue;">**投资协议登记簿管理人(“ROA Keeper”)**</mark>：控制投资协议合约的创建、传阅、签署、锁定标的股权、解锁并提取股权、发行新股、转让股权、终止交易、支付对价几项法律行为，负责将写指令路由至投资协议登记簿和股权登记簿两项簿记；

⑦　<mark style="color:blue;">**期权登记簿管理人(“ROO Keeper”)**</mark>：控制期权触发条件的输入、行使期权、设定期权质押、支付期权标的股对价、执行期权质权、请求否决人购买标的股、支付否决交易标的股对价、执行否决人股权几项法律行为，负责将写指令路由至期权登记簿、股权登记簿两项簿记；

⑧　<mark style="color:blue;">**质权登记簿管理人(“ROP Keeper”)**</mark>：控制设立质权、转让质权、偿付债务、延长担保期、锁定质权、解锁并释放质权、撤销质权、执行质权几项法律行为，负责将写指令路由至质权登记簿、股权登记簿、投资协议登记簿三项簿记且在执行质权时会自动生成投资协议合约；

⑨　<mark style="color:blue;">**特殊股东权益管理人(“SHA Keeper”)**</mark>：控制行使随售权、接受随售请求、行使反稀释权、接受反稀释赠与股份、行使优先购买权、计算优先认购股份总额几项法律行为，负责将写指令路由至投资协议登记簿、股权登记簿两项簿记且会自动生成《投资协议》；

⑩　<mark style="color:blue;">**股权挂牌交易登记簿管理人(“LOO Keeper”)**</mark>：控制以USDC结算的与挂牌交易登记相关的法律行为，包括注册投资人、批准投资人、撤销投资资格、挂牌新股发行要约、撤回新股发行要约、挂牌股转要约、撤回股转要约和提交购买订单，负责将写指令路由至挂牌交易（ETH）登记簿、股权登记簿、股东名册登记簿三个登记簿合约。

⑪  <mark style="color:blue;">**会计师(Accountant)**</mark>：控制利润或收益的分配以及资金划转等法律行为，并负责将写指令路由至收银台登记簿、股东会纪要登记簿和/或董事会纪要登记簿。

⑫ <mark style="color:blue;">**赎回登记簿管理人(“ROR Keeper”)**</mark>：控制可赎回类别的增删、赎回申请的提交以及所申请份额的赎回等法律行为，并负责将写指令路由至赎回登记簿、股权登记簿及收银台。

为方便用户使用USDC支付股权对价、保证金存款及相关费用，投资协议登记簿管理人（ROA Keeper）、股东名册管理人（ROM Keeper）、订单列表管理人（LOO Keeper）及期权登记簿管理人（ROO Keeper）被设计为可将写指令路由至收银台（Cashier），以执行与股权交易或出资相关的USDC支付交易。

</details>

<details>

<summary>📒 <strong>3.3 股东协议合约</strong></summary>

<mark style="color:blue;">**股东协议合约**</mark>用来动态定义跟股权交易、公司治理相关的行为规则和行权条件。

用户行权时，<mark style="color:blue;">**股东协议合约**</mark>会根据<mark style="color:blue;">**簿记管理人合约**</mark>的查询指令检索特定条款，然后反馈某种法律行为所需遵循的特定条件阈值，或者反馈特定条件是否成就的判断结果，供<mark style="color:blue;">**管理人合约**</mark>后续计算使用。

例如，股东表决时，<mark style="color:blue;">**管理人合约**</mark>会调用<mark style="color:blue;">**股东协议合约**</mark>，查询特定表决规则项下的表决期限安排，然后根据反馈的天数和该议案的提案日计算表决开始日和结束日，最后根据当前的区块时间戳判断是否处于表决期内。

<mark style="color:blue;">**股东协议合约**</mark>的具体条款按公司治理的法律逻辑抽象定义为不同的数据对象和方法，在起草过程中可以动态的给数据对象的特定属性设定不同的值，以此定义某类法律行为的不同规则，经股东会审议表决通过后发生法律效力。

比如，可以给增资交易设定30天的审议期限和三分之二的表决通过阈值、给股转交易设定15天的审议期限和二分之一的表决通过阈值，那么在相关协议提交股东会审议表决过程中，<mark style="color:blue;">**管理人合约**</mark>就可以根据交易类别来计算和判断不同表决程序的时间流程和通过情况。

<mark style="color:blue;">**股东协议合约**</mark>中规定的各项公司治理、股权交易规则按其复杂程度和规制事项分为”<mark style="color:blue;">**规则**</mark>“和”<mark style="color:blue;">**条款**</mark>“两大类别，分别由两个映射表来存储、管理。

1. **规则**

“<mark style="color:blue;">**规则**</mark>”，用32字节数组(bytes32)来定义、依靠“<mark style="color:blue;">**规则解析库合约**</mark>”解析其每条规则的关键属性值、期限值或条件判断阈值，使之可以转变为结构化数据对象。

每条规则都对应着自己的规则编号，可以方便的建立起从“编号”到“规则”的映射表，然后根据规则编号从映射表中检索到特定规则对象。

目前的规则包括：公司治理一般规则、表决规则、高管职位分配规则、优先权规则、一致行动人规则，以及股权挂牌交易规则。

* **① &#x20;**<mark style="color:blue;">**治理规则（No. 0）**</mark>

  **治理规则**规定了公司治理的关键事项，包括公司的法律形式、经营期限、表决权的计算依据（基于实缴资本还是认缴资本）、股东会及董事会的法定出席人数要求、提案门槛、股东或董事的人数上限、董事会任期，以及股东信息披露所需的最低持股比例。
* **② &#x20;**<mark style="color:blue;">**表决规则（No. 1 \~ 255）**</mark>

  **表决规则**规定了各类决策程序中特殊股东权利的行权期限，以及表决结果的计算方法。具体而言，第1号至第7号规则规定了适用于增资、向第三方转让股权、现有股东之间转让股权，以及由上述三种基本股权交易组合形成的四种混合交易类型的表决规则。第8号规则为股东协议修订设立了特殊的表决机制。第9号和第10号规则分别规定了股东会普通决议和特别决议的表决程序，第11号和第12号规则则分别规定了董事会普通决议和特别决议的表决程序。

  如有特殊需要，可在第12号规则之后自由增设自定义的**表决规则**，最多可至第255号规则。一旦此类规则被纳入**股东协议**，即可通过引用其对应的规则序号，在提案和表决过程中强制适用。任何表决规则的采纳或修改均构成对**股东协议**的修订，因此必须按照第8号规则经股东会批准后，修订后的**股东协议**方可生效。
* **③ &#x20;**<mark style="color:blue;">**职位分配规则（No. 256 \~ 511）**</mark>

  **职位分配规则**规定了董事及高级管理人员的提名权分配、适用的**表决规则**及其任期。通过在本规则下定义**董事**的提名权，可以实现董事会席位在股东之间的分配。提名权可归属于特定用户，也可归属于特定职位头衔（例如，首席执行官可提名首席财务官）。若适用的**表决规则**中，表决权比例及人数比例均设为零，则表示提名人可直接任命候选人就任该职位，无需经过批准。
* **④&#x20;**<mark style="color:blue;">**优先购买权规则（No. 512 \~ 767）**</mark>

  优先购买权规则规定了股东对新发行股权的优先认购权，或对拟转让股权的优先购买权。该等权利可平等授予全体股东，也可授予特定股东。标的股权的分配可按表决权比例进行，也可按权利行使的时间先后顺序进行。最多可设立256种不同的优先购买权规则，以适用于不同的交易类型及不同权利人组合。
* **⑤&#x20;**<mark style="color:blue;">**关联方组更新指令（No. 768 \~ 1023）**</mark>

  **关联方组**更新指令用于定义和更新关联股东（或一致行动人）的组别。每个关联方组以一名作为代表的股东用户编号进行标识。在股东协议的激活过程中，系统会自动执行其中包含的关联方组更新指令，将指定用户加入或移出特定关联方组。带有关联方组更新指令的股东协议修订提案，实质上构成相关股东对其关联关系的声明与披露。因此，该动议经审议通过，即表示股东会认可并批准该等关联关系。
* **⑥&#x20;**<mark style="color:blue;">**挂牌交易规则（No. 1024 \~ 1280）**</mark>

  **挂牌交易规则**规定了通过挂牌方式发行或交易股份的相关规则，包括最高及最低发行价格、最低交易价格、转售锁定期、合格投资人数量上限、核验人及发行人的职位头衔、本规则适用的股份类别，以及可发行的股份总面值上限。最多可设立256种挂牌交易规则，以规范不同类别股权的发行与交易。

2. **条款**

“<mark style="color:blue;">**条款**</mark>”， 由独立的智能合约定义，依靠结构化数据对象及其方法来定义复杂法律行为的行权条件、行为流程和中间参数算法。每个条款都对应着自己的条款编号，可以动态的建立起从“编号”到“合约地址”的映射表，然后根据条款编号从映射表中检索到特定条款的智能合约。

目前的条款合约包括：反稀释条款、锁定期条款、拖售权条款、随售权条款，以及（强买、强卖）期权条款。

* **①&#x20;**<mark style="color:blue;">**反稀释条款（No. 1 Term）**</mark>

  **反稀释条款**是一种特殊的智能合约，旨在保护现有股东免受因以较低价格发行新股而导致的稀释影响（否则其股份的有效单位收购价格，即收购成本除以总面值，将被摊薄）。该机制为不同类别的股份设定基准价格，并明确负有提供反稀释补偿义务的股东的用户编号（通常为公司的控股股东）。若新股的发行价格低于适用的基准价格，则义务方必须通过无偿转让股权的方式向权利人进行补偿，直至权利人的加权平均收购价格调整至与新股发行价格一致。\
  为便于用户起草和修订反稀释条款，以下列出了可供外部账户调用的编辑性 API 接口。

  <table data-header-hidden><thead><tr><th valign="top">API</th><th>函数及参数说明</th></tr></thead><tbody><tr><td valign="top"><p>function <strong>addBenchmark</strong>(</p><p>    uint256 <em>class</em>, uint <em>price</em></p><p>) external;</p></td><td>为类别序列号为 <em>class</em> 的股份增加反稀释基准，规定其发行价格不得低于 <em>price</em>。</td></tr><tr><td valign="top"><p>function <strong>removeBenchmark</strong>(</p><p>     uint256 <em>class</em></p><p>) external;</p></td><td>移除适用于类别序列号为 <em>class</em> 的股份发行价格的反稀释基准。</td></tr><tr><td valign="top"><p>function <strong>addObligor</strong>(</p><p>     uint256 <em>class</em>, uint256 <em>obligor</em></p><p>) external;</p></td><td>增加序列号为 <em>obligor</em> 的用户，在类别序列号为 <em>class</em> 的股份发行价格低于其反稀释基准时，承担补偿义务。</td></tr><tr><td valign="top"><p>function <strong>removeObligor</strong>(</p><p>     uint256 <em>class</em>, uint256 <em>obligor</em></p><p>) external;</p></td><td>将序列号为 <em>obligor</em> 的用户从承担适用于类别序列号为 <em>class</em> 的股份的反稀释义务所产生的补偿责任组中移除。</td></tr></tbody></table>
* **②&#x20;**<mark style="color:blue;">**锁定期条款（No.2 Term）**</mark>

  **锁定期条款**是一种特殊的智能合约，旨在定义并监控受转让限制的股份。对于每一股被锁定的股份，该合约会分配一个专属的“锁仓器”，用于记录锁定期届满日以及指定的“钥匙持有人”的用户编号，唯有经所有钥匙持有人同意，方可提前解锁。在锁定期届满前转让标的股份，必须取得所有钥匙持有人的一致同意；否则，系统将自动拒绝该转让提议。若锁定期届满日设为零，则该股份将永久锁定且不得转让，除非所有钥匙持有人一致同意解锁。

  为便于用户起草和修订锁定期条款，以下列出了可供外部账户调用的编辑性 API 接口。

  <table data-header-hidden><thead><tr><th valign="top">API</th><th valign="top">函数及参数说明</th></tr></thead><tbody><tr><td valign="top"><p>function <strong>setLocker</strong>(</p><p>    uint256 <em>seqOfShare</em>, uint <em>dueDate</em></p><p>) external;</p></td><td valign="top">为序列号为 <em>seqOfShare</em> 的特定股份设置锁仓器，将其锁定至 <em>dueDate</em> 后方可出售。</td></tr><tr><td valign="top"><p>function <strong>delLocker</strong>(</p><p>    uint256 <em>seqOfShare</em></p><p>) external;</p></td><td valign="top">删除序列号为 <em>seqOfShare</em> 的特定股份的锁仓器。</td></tr><tr><td valign="top"><p>function <strong>addKeyholder</strong>(</p><p>    uint256 <em>seqOfShare</em>, uint256 <em>keyholder</em></p><p>) external;</p></td><td valign="top">增加用户编号为 <em>keyholder</em> 的钥匙持有人，该用户须对在锁定期届满前解锁序列号为 <em>seqOfShare</em> 的股份的动议进行表决。</td></tr><tr><td valign="top"><p>function <strong>removeKeyholder</strong>(</p><p>    uint256 <em>seqOfShare</em>, uint256 <em>keyholder</em></p><p>) external;</p></td><td valign="top">移除用户编号为 <em>keyholder</em> 的钥匙持有人，该用户须对在锁定期届满前解锁序列号为 <em>seqOfShare</em> 的股份的动议进行表决。</td></tr></tbody></table>
* **③&#x20;**<mark style="color:blue;">**拖售权/随售权条款（No.3 \~ No.4 Term）**</mark>

  **拖售权/随售权条款**是一种特殊的智能合约，旨在定义并执行协同股权转让安排。在拖售权机制下，当出售股东拟转让股权时，可要求指定的义务方一并出售其股权，从而使收购方获得公司更大比例的股权。在随售权机制下，指定的权利人可要求出售股东允许其按照相同的价格和条款出售股权，从而实现共同退出。

  该合约通过一个以 bytes32 编码的关联规则，来定义行权起始日、行权期限、最低拖售价格或最低年化净资产收益率，以及其他行权条件和时间安排。它利用出售股东的用户编号来识别数据对象“关联组”，该关联组进一步由关联规则和跟随方（即参与转让的拖售义务方或随售权利人）构成。行权条件可设置为公司控制权变更，也可无条件行使，具体取决于条款约定。

  为便于用户起草和修订拖售权/随售权条款，以下列出了可供外部账户调用的编辑性 API 接口。

  <table data-header-hidden><thead><tr><th valign="top">API</th><th>函数及参数说明</th></tr></thead><tbody><tr><td valign="top"><p>function <strong>addDragger</strong>(</p><p>    bytes32 <em>rule</em>,</p><p>    uint256 <em>dragger</em></p><p>) external;</p></td><td>将序列号为 <em>dragger</em> 的用户添加至编码为 <em>rule</em> 的关联规则中，以建立新的拖售权/随售权安排。</td></tr><tr><td valign="top"><p>function <strong>removeDragger</strong>(</p><p>    uint256 <em>dragger</em></p><p>) external;</p></td><td>将序列号为 <em>dragger</em> 的用户移除，以删除相应的拖售权/随售权安排。</td></tr><tr><td valign="top"><p>function <strong>addFollower</strong>(</p><p>    uint256 <em>dragger</em>,</p><p>    uint256 <em>follower</em></p><p>) external;</p></td><td>将序列号为 <em>follower</em> 的用户添加至与用户序列号为 <em>dragger</em> 的出售方相关联的拖售权/随售权安排中。</td></tr><tr><td valign="top"><p>function <strong>removeFollower</strong>(</p><p>    uint256 <em>dragger</em>,</p><p>    uint256 <em>follower</em></p><p>) external;</p></td><td>将序列号为 <em>follower</em> 的用户从与用户序列号为 <em>dragger</em> 的出售方相关联的拖售权/随售权安排中移除。</td></tr></tbody></table>
* **④&#x20;**<mark style="color:blue;">**强买权/强卖权条款**</mark>

  **强买权/强卖权条款**是一种特殊的智能合约，旨在定义并强制执行以预定价格买入或卖出特定数量和类别的股份。通过灵活配置行权条件，该条款可用于实现复杂的股权投资安排，例如估值调整（对赌）和强制回购。

  为便于用户起草和修订强买权/强卖权条款，以下列出了可供外部账户调用的编辑性 API 接口。

  <table data-header-hidden><thead><tr><th valign="top">API</th><th>函数及参数说明</th></tr></thead><tbody><tr><td valign="top"><p>function <strong>createOption</strong>(</p><p>    bytes32 <em>snOfOpt</em>, bytes32 <em>snOfCond</em>,</p><p>    uint <em>rightholder</em>, uint <em>paid</em>, uint <em>par</em></p><p>) external returns</p><p>(OptionsRepo.Head memory head);</p></td><td>创建新的强买权/强卖权，期权条款编码为 <em>snOfOpt</em>，触发条件编码为 <em>snOfCond</em>，实缴价值为 <em>paid</em>，票面价值为 <em>par</em>，权利人为序列号为 <em>rightholder</em> 的用户。</td></tr><tr><td valign="top"><p>function <strong>delOption</strong>(</p><p>    uint256 <em>seqOfOpt</em></p><p>) external returns(bool flag);</p></td><td>删除序列号为 <em>seqOfOpt</em> 的强买权/强卖权。</td></tr><tr><td valign="top"><p>function <strong>addObligorIntoOpt</strong>(</p><p>    uint256 <em>seqOfOpt</em>, uint256 <em>obligor</em></p><p>) external returns (bool flag);</p></td><td>将用户序列号为 <em>obligor</em> 的义务方添加至序列号为 <em>seqOfOpt</em> 的强买权/强卖权中。</td></tr><tr><td valign="top"><p>function <strong>removeObligorFromOpt</strong>(</p><p>    uint256 <em>seqOfOpt</em>, uint256 <em>obligor</em></p><p>) external returns (bool flag);</p></td><td>将用户序列号为 <em>obligor</em> 的义务方从序列号为 <em>seqOfOpt</em> 的强买权/强卖权中移除。</td></tr></tbody></table>

3. **股东协议合约的编辑性接口(APIs)**

<mark style="color:blue;">**股东协议合约**</mark>可以视为一个由“规则映射表”和“条款映射表”构成的数据库，用于动态定义各项规则的参数和属性，以便在运行时检索获取它们。<mark style="color:blue;">**规则解析库合约**</mark>及<mark style="color:blue;">**各类条款合约**</mark>的功能则是按照法律逻辑为各种规则和条款建立模型，抽象定义其核心属性与方法，并暴露相应的 API，以便用户可以动态地设置这些规则和条款的各项属性或参数。这样，系统在运行时，即可根据用户指令，由特定的<mark style="color:blue;">**分项簿记管理人**</mark>按照特定法律行为的预设逻辑检索<mark style="color:blue;">**股东协议**</mark>合约，获取特定规则的属性值或参数，进而判断特定条件是否成就或控制特定流程。

<mark style="color:blue;">**股东协议合约**</mark>的外部 API 主要用于增删或查询<mark style="color:blue;">**条款及规则**</mark>。为便于用户起草和修订股东协议合约，以下列出了可供外部账户调用的、与合约起草及查询相关的编辑性 API 接口。

<table data-header-hidden><thead><tr><th valign="top">API</th><th>函数及参数说明</th></tr></thead><tbody><tr><td valign="top"><p>function <strong>createTerm</strong>(</p><p>    uint <em>title</em>, uint <em>version</em></p><p>) external;</p></td><td>使用条款的序列号 <em>title</em> 及版本号 <em>version</em> 创建克隆智能合约，并将克隆实例的地址添加至条款映射表中。</td></tr><tr><td valign="top">function <strong>removeTerm</strong>(uint <em>title</em>) external;</td><td>删除由条款序列号 <em>title</em> 标识的克隆智能合约。</td></tr><tr><td valign="top">function <strong>addRule</strong>(uint seqOfRule, bytes32 <em>rule</em>) external;</td><td>将以 bytes32 编码为 <em>rule</em>、由规则序列号 <em>seqOfRule</em> 标识的规则添加至规则映射表中。</td></tr><tr><td valign="top">function <strong>removeRule</strong>(uint256 <em>seqOfRule</em>) external;</td><td>删除由序列号 <em>seqOfRule</em> 标识的规则。</td></tr><tr><td valign="top">function <strong>finalizeSHA</strong>() external;</td><td>将对条款及本股东协议合约拥有写权限的特殊角色转让至“零地址”，以永久锁定其内容。</td></tr></tbody></table>

4. **签字页**

<mark style="color:blue;">**签字页**</mark>是一个独立、可复用、可继承的组件类智能合约，定义了合同履行的若干关键属性，包括合同当事方、签名栏、签约截止日及交割截止日等。

<mark style="color:blue;">**股东协议合约**</mark>与<mark style="color:blue;">**投资协议合约**</mark>均将<mark style="color:blue;">**签字页**</mark>作为特殊组件加以继承，以定义并记录与合同履行相关的信息。

为便于用户起草和修订<mark style="color:blue;">**签字页**</mark>，以下列出了可供外部账户调用的编辑性 API 接口。

<table data-header-hidden><thead><tr><th valign="top">API</th><th>函数及参数说明</th></tr></thead><tbody><tr><td valign="top"><p>function <strong>setTiming</strong>(</p><p>    bool <em>initPage</em>,</p><p>    uint <em>signingDays</em>,</p><p>    uint <em>closingDays</em></p><p>) external;</p></td><td>设置初始页面（<em>initPage</em> 为 true）或补充页面（<em>initPage</em> 为 false）上的签约天数 <em>signingDays</em> 及交割天数 <em>closingDays</em> 的时间参数。该函数应由负责起草相关合约的律师调用。</td></tr><tr><td valign="top"><p>function <strong>addBlank</strong>(</p><p>    bool <em>initPage</em>,</p><p>    bool <em>beBuyer</em>,</p><p>    uint256 <em>seqOfDeal</em>,</p><p>    uint256 <em>acct</em></p><p>) external;</p></td><td>在初始页面（<em>initPage</em> 为 true）或补充页面（<em>initPage</em> 为 false）上，为与序列号为 <em>seqOfDeal</em> 的交易相关的卖方（<em>beBuyer</em> 为 false）或买方（<em>beBuyer</em> 为 true），为目标签署人（用户编号为 <em>acct</em>）添加新的签名栏。该函数可由负责起草相关合约的律师调用，或由相关分项簿记管理人在行使特殊股东权利时调用。</td></tr><tr><td valign="top"><p>function <strong>removeBlank</strong>(</p><p>    bool <em>initPage</em>,</p><p>    uint256 <em>seqOfDeal</em>,</p><p>    uint256 <em>acct</em></p><p>) external;</p></td><td>从初始页面（<em>initPage</em> 为 true）或补充页面（<em>initPage</em> 为 false）上，删除与序列号为 seqOfDeal 的交易相关的、目标签署人用户编号为 acct 的签名栏。该函数可由负责起草相关合约的律师调用，或由相关分项簿记管理人在行使特殊股东权利时调用。</td></tr></tbody></table>

</details>

<details>

<summary>📋 <strong>3.4 投资协议合约</strong></summary>

<mark style="color:blue;">**投资协议合约**</mark>用于动态定义增发股权、转让股权等股权交易安排的各项交易要素，例如标的股权、转让价格、转让数量、买方身份、签约截止日、交割截止日、合同当事方等等。

<mark style="color:blue;">**投资协议合约**</mark>妥善签署后，当事方可调用<mark style="color:blue;">**管理人合约**</mark>的相关接口推动协议的审议、表决、支付及交割流程，<mark style="color:blue;">**管理人合约**</mark>将按<mark style="color:blue;">**投资协议**</mark>和<mark style="color:blue;">**股东协议**</mark>的相关约定自动完成权利人身份识别、行权条件校验、交易流程控制，直至实现最后的交易目的——变更股权簿记。

<mark style="color:blue;">**投资协议合约**</mark>本质上是一系列变更股权簿记状态的写指令脚本，在<mark style="color:blue;">**管理人合约**</mark>的控制下按<mark style="color:blue;">**股东协议**</mark>事先规定的条件和流程，在相关当事方的外部触发动作推动下有序的自动履行，合约执行的最后目标就是修改<mark style="color:blue;">**股权登记簿合约**</mark>中簿记的股权状态信息，进而实现增发股权或转让股权的交易目的。

如果<mark style="color:blue;">**股东协议**</mark>中约定有“优先权”、“随售权”、“拖售权”、”反稀释“等特殊股东权益，则相关权利人可在股权交易的行权期间调用<mark style="color:blue;">**管理人合约**</mark>的相关接口行权，<mark style="color:blue;">**管理人合约**</mark>则会自动按<mark style="color:blue;">**股东协议合约**</mark>中定义的算法和流程变更<mark style="color:blue;">**投资协议合约**</mark>的交易相对方（优先权）、添加股权赠与交易（反稀释）或增加相同出让价格的交易（随售权）等操作，从而实现<mark style="color:blue;">**股东协议**</mark>中约定的各种商业安排。

***

<mark style="color:blue;">**投资协议合约**</mark>规定的股权交易实质性要素（标的股权、买方、数量、价格、交割截止日等）由结构化数据对象——“<mark style="color:blue;">**交易订单**</mark>”来具体定义，关于合同当事方构成、签约截止日、交割截止日等程序性要素则由可复用、可继承的智能合约组件——“<mark style="color:blue;">**签字页**</mark>”来定义。

#### 1. 交易订单

<mark style="color:blue;">**交易订单**</mark>定义了在<mark style="color:blue;">**股权登记簿**</mark>中发行新股或变更已有股权所需要的全部信息，而且还特意定义了一个32字节长度的<mark style="color:blue;">**哈希时间锁**</mark>，供交易双方链下或跨链支付股权对价时使用。

按股权交易的买方及标的股权的性质差异，<mark style="color:blue;">**交易订单**</mark>被分为<mark style="color:blue;">**增资**</mark>、<mark style="color:blue;">**对外转股**</mark>、<mark style="color:blue;">**内部转股**</mark>3种基本类别。这3种基本交易订单类别的排列组合，进一步构成了7种<mark style="color:blue;">**投资协议**</mark>类别。

<mark style="color:blue;">**股东协议**</mark>中，可针对上述7种不同的<mark style="color:blue;">**投资协议**</mark>类别设定不同的表决规则，从而满足投资人的否决权安排或其他特殊权益要求。

#### 2. 投资协议合约的编辑接口(APIs)

<mark style="color:blue;">**投资协议合约**</mark>的外部 API 主要用于增删或查询<mark style="color:blue;">**交易订单**</mark>。此外，为满足标的股份锁定、交割以及特殊股东权利行使等交易需求，<mark style="color:blue;">**投资协议合约**</mark>还预留了其他接口，可供相关<mark style="color:blue;">**分项簿记管理人**</mark>在执行前述流程时自动调用，以自动更新相关变量的状态。

为便于用户起草和修订<mark style="color:blue;">**投资协议合约**</mark>，以下列出了可供外部账户调用的、与合同起草相关的编辑性 API 接口。

<table data-header-hidden><thead><tr><th valign="top">API</th><th>函数及参数说明</th></tr></thead><tbody><tr><td valign="top"><p>function <strong>addDeal</strong>(</p><p>    bytes32 <em>snOfDeal</em>,</p><p>    uint <em>buyer</em>,</p><p>    uint <em>groupOfBuyer</em>,</p><p>    uint <em>paid</em>,</p><p>    uint <em>par</em>,</p><p>    uint <em>distrWeight</em></p><p>) external;</p></td><td>创建交易对象并将其添加至投资协议合约，交易参数以 bytes32 形式编码为 <em>snOfDeal</em>，买方为用户编号 <em>buyer</em>，买方关联方小组代表为用户编号 <em>groupOfBuyer</em>，交易实缴价值为 <em>paid</em>，相应票面价值为 <em>par</em>，增资交易中新类别的分配权重为 <em>distrWeight</em>。</td></tr><tr><td valign="top">function <strong>delDeal</strong>(uint256 <em>seq</em>) external;</td><td>删除序列号为 <em>seq</em> 的交易。</td></tr><tr><td valign="top">function <strong>finalizeIA</strong>() external;</td><td>定稿投资协议合约并锁定其内容。</td></tr></tbody></table>

#### 3. 签字页

<mark style="color:blue;">**投资协议**</mark>同样继承“<mark style="color:blue;">**签字页**</mark>”作为其特殊组件，用以定义和记录与合同执行相关的信息。初始<mark style="color:blue;">**签字页**</mark>由合同当事方在合同订立时签署，而第二份<mark style="color:blue;">**签字页**</mark>将在相关权利人行使特殊权利（如“优先购买权”、“随售权”、“拖售权”、“反稀释权”等）时，由<mark style="color:blue;">**管理人合约**</mark>自动生成并填写。

当一方调用<mark style="color:blue;">**管理人合约**</mark>的API签署<mark style="color:blue;">**投资协议**</mark>时，<mark style="color:blue;">**管理人合约**</mark>会在签名栏中记录该签署动作的区块编号和时间戳。此外，签名栏还可存储一个特殊哈希值，该哈希值由手写签名或公司印章扫描件生成，可用于未来验证数字文件。

</details>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://comboox.gitbook.io/whitepaper-cn/xi-tong-zong-shu/3.-xi-tong-jia-gou.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
