3.2. 管理人合约管理人合约定义了关于公司治理、股权交易的几十种法律行为的API,以此管理和控制相关法律行为的行为主体、行权条件、行动流程和法律后果。
3.2.1.管理人合约的功能用户行权时,
管理人合约会按照特定的法律逻辑调用
股东协议合约、特定的
登记簿合约,查询法律行为需要满足哪些前提条件(或后续计算需要依赖哪些中间参数),结合从API接口获取的输入参数,计算并判断行权条件是否成就,或算出中间参数的具体数值;若所有条件均成就,则调用特定的
登记簿合约来修改特定簿记权益的状态值,或者将特定法律行为的意思表示内容、行为轨迹信息记录下来。
例如,股东表决时,用户需要调用
总管理人合约的“投票表决”API,输入目标动议编号及赞同、反对或弃权的表决态度,之后,
总管理人合约会调用注册中心合约查询行权账户的用户编号,再调用
股东会议纪要管理人合约的“投票表决”API,转交后续步骤的控制权。其后,
股东会议纪要管理人合约会:
① 从
股东会纪要登记簿中查询获取该项动议的数据对象;
② 根据动议对象的表决规则编号从
股东协议合约中查询获取表决规则并推算出动议的表决期;
③ 根据当前区块时间戳判断是否处于表决期;
④ 若处于表决期,则再调用
股东名册合约验证用户是否为公司股东;
⑤ 若是股东,则再从动议对象的代理权映射表中获得该股东的受托表决情况,进而再调取
股东名册合约查询并计算投票人所代表的表决权权重;
⑥ 最后,将投票人用户编号、表决态度、表决权重、表决时间等信息存储记录在
股东会纪要登记簿的动议对象中。
从前例可知,
管理人合约是各项法律行为行权条件和逻辑流程的控制中枢。为满足EIP-170规范的容量要求,系统定义了
总管理人和
分项管理人两类合约。
3.2.2.总管理人合约总管理人合约(“General Keeper”)处于公司簿记系统最上层,具备如下核心功能:
① 是公司簿记系统唯一的写操作指令入口,负责将写指令路由到特定的分项簿记管理人合约;
② 同时也是各登记簿合约的地址索引中枢,可根据查询请求反馈特定登记簿合约的账户地址;
③ 对外代表公司法人主体,以公司名义完成链上法律行为,例如,签署或执行智能合约、支付代币、行使表决权等;
④ 代表公司法人持有ETH、CBP等链上加密资产,根据股东会决议或董事会决议,支付特定金额的加密资产至决议规定的特定账户;
⑤ 临时存储股转交易的ETH对价收入,可根据股权卖方的调用请求将暂存的ETH划转至卖方主钥匙账户地址。
3.2.3.分项管理人合约分项管理人合约是控制法律行为主体、条件、流程与后果的核心计算层,具体包括:
①
股东协议登记簿管理人(“ROC Keeper”): 控制股东协议合约的创建、传阅、签署、激活、加入几项法律行为,负责管理股东协议登记簿;
ROC Keeper API
function createSHA(uint version, uint caller) external;
function circulateSHA(address body, bytes32 docUrl, bytes32 docHash, uint caller) external;
function signSHA(address sha, bytes32 sigHash, uint caller) external;
function activateSHA(address body, uint caller) external;
function acceptSHA(bytes32 sigHash, uint caller) external;
②
董事高管名册管理人(“ROD Keeper”): 控制董事和高管的就职、解职、辞职几项法律行为,负责管理
高管名册登记簿;
ROD Keeper API
function takeSeat(uint256 seqOfMotion, uint256 seqOfPos, uint caller) external;
function removeDirector (uint256 seqOfMotion, uint256 seqOfPos, uint caller) external;
function takePosition(uint256 seqOfMotion, uint256 seqOfPos, uint caller) external;
function removeOfficer (uint256 seqOfMotion, uint256 seqOfPos, uint caller) external;
function quitPosition(uint256 seqOfPos, uint caller) external;
③
董事会纪要管理人(“BMM Keeper”): 控制董事会动议的创建、提案、委托投票代理人、投票表决、统计表决结果、执行决议等法律动作,其中的动议包括任命及解职高管、审议文件、支付公司持有的代币、调用智能合约几大类别,负责管理
董事会纪要登记簿;
BMM Keeper API
function nominateOfficer(uint256 seqOfPos, uint candidate, uint nominator) external;
function createMotionToRemoveOfficer(uint256 seqOfPos, uint nominator) external;
function createMotionToApproveDoc(uint doc, uint seqOfVR, uint executor, uint proposer) external;
function proposeToTransferFund(
address to, bool isCBP, uint amt,
uint expireDate, uint seqOfVR, uint executor, uint proposer
) external;
function createAction(
uint seqOfVR, address[] memory targets, uint256[] memory values,
bytes[] memory params, bytes32 desHash, uint executor, uint proposer
) external;
function entrustDelegaterForBoardMeeting(uint256 seqOfMotion, uint delegate, uint caller) external;
function proposeMotionToBoard (uint seqOfMotion, uint caller) external;
function castVote(uint256 seqOfMotion, uint attitude, bytes32 sigHash, uint caller) external;
function voteCounting(uint256 seqOfMotion) external;
function transferFund(
address to, bool isCBP, uint amt,
uint expireDate, uint seqOfMotion, uint caller
) external;
function execAction(
uint typeOfAction, address[] memory targets, uint256[] memory values,
bytes[] memory params, bytes32 desHash, uint256 seqOfMotion
uint caller
) external;
④
股东名册管理人(“ROM Keeper”): 控制设定股东人数上限、设置实缴出资哈希锁、解锁并提取实缴出资、撤回被锁定的实缴出资、减少注册资本几项法律行为,管理股东名册和股权登记簿两个登记簿合约;
ROM Keeper API
function setMaxQtyOfMembers(uint max) external;
function setPayInAmt(
uint seqOfShare,
uint amt,
uint expireDate,
bytes32 hashLock
) external;
function requestPaidInCapital(bytes32 hashLock, string memory hashKey) external;
function withdrawPayInAmt(bytes32 hashLock, uint seqOfShare) external;
function payInCapital(uint seqOfShare, uint amt, uint caller) external payable;
function decreaseCapital(uint256 seqOfShare, uint paid, uint par) external;
function updatePaidInDeadline(uint256 seqOfShare, uint line) external;
⑤
股东会纪要管理人(“GMM Keeper”): 控制股东会动议的创建、提案、委托投票代理人、投票表决、统计表决结果、执行决议等法律动作,其中的动议包括任命及解职董事、审议文件、支付代币、调用智能合约几大类别,管理股东会纪要登记簿;
GMM Keeper API
function nominateDirector(uint256 seqOfPos, uint candidate, uint nominator) external;
function createMotionToRemoveDirector(uint256 seqOfPos, uint caller) external;
function proposeDocOfGM(
uint doc, uint seqOfVR, uint executor, uint proposer
) external;
function proposeToDistributeProfits(
uint amt, uint expireDate, uint seqOfVR, uint executor, uint caller
) external;
function proposeToTransferFund(
address to, bool isCBP, uint amt, uint expireDate,
uint seqOfVR, uint executor, uint proposer
) external;
function createActionOfGM(
uint seqOfVR, address[] memory targets, uint256[] memory values,
bytes[] memory params, bytes32 desHash, uint executor, uint proposer
) external;
function entrustDelegaterForGeneralMeeting(uint256 seqOfMotion, uint delegate, uint caller) external;
function proposeMotionToGeneralMeeting(uint256 seqOfMotion, uint caller) external;
function castVoteOfGM(
uint256 seqOfMotion, uint attitude, bytes32 sigHash, uint caller
) external;
function voteCountingOfGM(uint256 seqOfMotion) external;
function distributeProfits(uint amt, uint expireDate, uint seqOfMotion, uint caller) external;
function transferFund(
address to, bool isCBP, uint amt,
uint expireDate, uint seqOfMotion, uint caller
) external;
function execActionOfGM(
uint seqOfVR, address[] memory targets, uint256[] memory values,
bytes[] memory params, bytes32 desHash, uint256 seqOfMotion, uint caller
) external returns(uint);
⑥
投资协议登记簿管理人(“ROA Keeper”):控制投资协议合约的创建、传阅、签署、锁定标的股权、解锁并提取股权、发行新股、转让股权、终止交易、支付对价几项法律行为,管理投资协议登记簿和股权登记簿两项簿记;
ROA Keeper API
function createIA(uint256 version, address primeKeyOfCaller, uint caller) external;
function circulateIA(address ia, bytes32 docUrl, bytes32 docHash, uint256 caller) external;
function signIA(address ia, uint256 caller, bytes32 sigHash) external;
function pushToCoffer(
address ia,
uint256 seqOfDeal,
bytes32 hashLock,
uint closingDeadline,
uint256 caller
) external;
function closeDeal(address ia, uint256 seqOfDeal, string memory hashKey) external;
function transferTargetShare(address ia, uint256 seqOfDeal, uint256 caller) external;
function issueNewShare(address ia, uint256 seqOfDeal, uint caller) external;
function terminateDeal(address ia, uint256 seqOfDeal, uint256 caller) external;
function payOffApprovedDeal(address ia, uint seqOfDeal, uint msgValue, uint caller) external;
⑦
期权登记簿管理人(“ROO Keeper”):控制期权触发条件的输入、行使期权、设定期权质押、支付期权标的股对价、执行期权质权、请求否决人购买标的股、支付否决交易标的股对价、执行否决人股权几项法律行为,管理期权登记簿、股权登记簿两项簿记;
ROO Keeper API
function updateOracle(uint256 seqOfOpt, uint d1, uint d2, uint d3) external;
function execOption(uint256 seqOfOpt) external;
function createSwap(uint256 seqOfOpt, uint seqOfTarget, uint paidOfTarget, uint seqOfPledge) external;
function payOffSwap(uint256 seqOfOpt, uint256 seqOfSwap) external payable;
function terminateSwap(uint256 seqOfOpt, uint256 seqOfSwap) external;
function requestToBuy(address ia, uint seqOfDeal, uint paidOfTarget, uint seqOfPledge) external;
function payOffRejectedDeal(address ia, uint seqOfDeal, uint seqOfSwap) external payable;
function pickupPledgedShare(address ia, uint seqOfDeal, uint seqOfSwap) external;
⑧
质权登记簿管理人(“ROP Keeper”):控制设立质权、转让质权、偿付债务、延长担保期、锁定质权、解锁并释放质权、撤销质权、执行质权几项法律行为,管理质权登记簿、股权登记簿、投资协议登记簿三项簿记且在执行质权时会自动生成投资协议合约;
ROP Keeper API
function createPledge(
bytes32 snOfPld,
uint paid,
uint par,
uint guaranteedAmt,
uint execDays,
uint caller
) external;
function transferPledge(
uint256 seqOfShare,
uint256 seqOfPld,
uint buyer,
uint amt,
uint caller
) external;
function refundDebt(uint256 seqOfShare, uint256 seqOfPld, uint amt, uint caller) external;
function extendPledge(uint256 seqOfShare, uint256 seqOfPld, uint extDays, uint caller) external;
function lockPledge(uint256 seqOfShare, uint256 seqOfPld, bytes32 hashLock, uint caller) external;
function releasePledge(
uint256 seqOfShare,
uint256 seqOfPld,
string memory hashKey,
uint caller
) external;
function execPledge(
bytes32 snOfDeal,
uint256 seqOfPld,
uint version,
uint buyer,
uint groupOfBuyer,
uint caller
) external;
function revokePledge(uint256 seqOfShare, uint256 seqOfPld, uint caller) external;
⑨
特殊股东权益管理人(“SHA Keeper”):控制行使随售权、接受随售请求、行使反稀释权、接受反稀释赠与股份、行使优先购买权、计算优先认购股份总额几项法律行为,管理投资协议登记簿、股权登记簿两项簿记且会自动生成《投资协议》;
SHA Keeper API
function execTagAlong(
address ia,
uint256 seqOfDeal,
uint256 seqOfShare,
uint paid,
uint par,
bytes32 sigHash
) external;
function execDragAlong(
address ia,
uint256 seqOfDeal,
uint256 seqOfShare,
uint paid,
uint par,
bytes32 sigHash
) external;
function acceptAlongDeal(
address ia,
uint256 seqOfDeal,
bytes32 sigHash
) external;
function execAntiDilution(
address ia,
uint256 seqOfDeal,
uint256 seqOfShare,
bytes32 sigHash
) external;
function takeGiftShares(address ia, uint256 seqOfDeal) external;
function execFirstRefusal(
uint256 seqOfRule,
uint256 seqOfRightholder,
address ia,
uint256 seqOfDeal,
bytes32 sigHash
) external;
function computeFirstRefusal(address ia, uint256 seqOfDeal) external;
⑩
股权挂牌交易登记簿管理人(“LOO Keeper”):控制注册投资人、批准投资人、撤销投资资格、挂牌新股发行要约、撤回新股发行要约、挂牌股转要约、撤回股转要约、提交购买订单几项法律行为,管理股权挂牌交易登记簿、股权登记簿、股东名册登记簿三个登记簿合约。
LOO Keeper API
function regInvestor(uint userNo, uint groupRep, bytes32 idHash) external;
function approveInvestor(uint caller, uint caller, uint seqOfLR) external;
function revokeInvestor(uint caller, uint caller, uint seqOfLR) external;
function placeInitialOffer(
uint caller, uint classOfShare, uint execHours,
uint paid, uint price, uint seqOfLR
) external;
function withdrawInitialOffer(
uint caller, uint classOfShare, uint seqOfOrder, uint seqOfLR
) external;
function placeSellOrder(
uint caller, uint seqOfClass, uint execHours, uint paid,
uint price, uint seqOfLR, bool sortFromHead
) external;
function withdrawSellOrder(uint caller, uint classOfShare, uint seqOfOrder) external;
function placeBuyOrder(uint caller, uint classOfShare, uint paid, uint price) external payable;