# BTS-40 DRC合约 **Repository Path**: btsi/drc ## Basic Information - **Project Name**: BTS-40 DRC合约 - **Description**: 数据资源存证智能合约,简称DRC合约,代号BTS-40,适用于各类数字资源的区块链可信存证。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2024-04-01 - **Last Updated**: 2025-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 数据资源存证合约 数据资源存证合约, 允许以去中心化、安全和透明的方式进行存证及检索存证。它由7个智能合约组成,负责实现访问控制、存证逻辑以及合约升级机制。 ## 目录 - [快速开始](#快速开始) - [版本要求](#版本要求) - [合约测试](#合约测试) - [合约部署](#合约部署) - [合约调用](#合约调用) - [合约设置](#合约设置) - [合约升级](#合约升级) - [贡献代码](#贡献代码) - [使用安全](#使用安全) - [项目支持](#项目支持) - [未来改进](#未来改进) - [开源许可](#开源许可) ## 快速开始 clone仓库到本地并安装所需依赖。 ```bash git clone git@github.com:2CLabs/DA-contract-standard.git drevidence cd drevidence npm install ``` ## 版本要求 - Node.js (v14.17.0 或更高版本) - npm (v6.14.13 或更高版本) ## 合约测试 要测试智能合约,请运行以下命令: ```bash npx hardhat test ``` 这将执行位于 `test` 目录中的测试脚本, 此测试脚本将在本地Hardhat网络执行。 ## 合约部署 ### 部署到FISCO BCOS v3 #### 使用FiscoBcos控制台手动部署 1. 拷贝智能合约文件到FiscoBcos的console/contracts/solidity目录下 ```bash mkdir -p console/contracts/solidity/drevidence cp -rf drevidence/contracts/*.sol console/contracts/solidity/drevidence cp -rf drevidence/node_modules/@openzeppelin console/contracts/solidity/drevidence ``` 2. 启动FiscoBcos console, 进入控制台 ```bash bash console/start.sh ``` 3. 部署合约: 部署DREvidenceAdminController合约 ```console deploy drevidence/DREvidenceAdminController ``` 部署DREvidenceUserController合约 ```console deploy drevidence/DREvidenceUserController ``` 部署DREvidenceRightController合约 ```console deploy drevidence/DREvidenceRightController ``` 部署DREvidenceReviewController合约 ```console deploy drevidence/DREvidenceReviewController ``` 部署DREvProxyAdmin合约 ```console deploy drevidence/DREvProxyAdmin ``` 部署DREvProxy合约 ** 国密版本 ** > 0xea605f3d为国密版本下initialize()函数的方法签名 ```console deploy drevidence/DREvProxy 0xea605f3d ``` ** 非国密版本 ** > 0x8129fc1c为非国密版本下initialize()函数的方法签名 ```console deploy drevidence/DREvProxy 0x8129fc1c ``` 4. 部署完成 ## 合约调用 对数字资产存证合约的所有调用应直接使用DREvProxy合约地址来进行, 注意:若合约部署在FiscoBcos网络, 由于FiscoBcos console的call命令执行时,对合约abi进行了检查, 且无法使用attach操作, 因此不能直接在console直接使用call命令调用合约,请直接使用FiscoBcos SDK来对合约进行调用.具体调用请参考https://github.com/2CLabs/DRC-java-test.git 。 ## 合约设置 数据资源存证合约部署后, 合约管理员需调用如下接口对合约进行设置,合约才能正常工作。具体调用请参考https://github.com/2CLabs/DRC-java-test.git 。 #### 1 设置各个controller逻辑合约的方法签名 ```bash setSelectors(IDREvidenceLogicMan proxy, bytes4[] memory selectors, address[] memory logicAddresses) ``` 该接口需通过DREvProxyAdmin调用,目前支持的controller逻辑合约有 DREvidenceAdminController,DREvidenceUserController,DREvidenceRightController,DREvidenceReviewController. 其中参数proxy为DREvProxy的地址。 logicAddress为各方法签名对应的controller逻辑合约地址。 其中DREvidenceAdminController对应的方法签名如下表所示: | 合约名称 | 对应的函数名称 | 非国密版本签名 | 国密版本签名 | | ------------------------- | ------------------------------------- | -------------- | ------------ | | DREvidenceAdminController | disableAccessControl | 0x760B04DD | 0xAA2AB25A | | | enableAccessControl | 0x36F5F45E | 0x45135492 | | | getDataRightCategory | 0x8A9019B3 | 0xE24DF4FA | | | getSupportVariableDataFields | 0xE6A310BA | 0x1673BBEE | | | grantUserManagePermission | 0x3DD296B5 | 0xB70B2FBC | | | hasUserManageRole | 0x4CEA35A6 | 0xB5AED06F | | | initialize | 0x8129FC1C | 0xEA605F3D | | | setChainName | 0xC0C41F22 | 0xC52A7B12 | | | setDataRightCategory | 0x936628C1 | 0x7C6DD587 | | | setDataRightSupportVariableDataFields | 0x47791208 | 0x7F4D27B6 | | | setTextMaxLen | 0x50E12A46 | 0x4C9A1821 | | | getChainName | 0xD722B0BC | 0x2B668B87 | | | getTextMaxLen | 0xCE3FB8AC | 0x5EA854EF | | | getstrArrayMaxLen | 0x35F6A661 | 0x728DA5B3 | | | getAccessControl | 0xFC1DAD81 | 0x7181C35C | 其中DREvidenceUserController对应的方法签名如下表所示: | 合约名称 | 对应的函数名称 | 非国密版本签名 | 国密版本签名 | | ------------------------ | -------------------------- | -------------- | ------------ | | DREvidenceUserController | addUser | 0xC115B334 | 0xD9AD467B | | | getUserRoles | 0x996B4F65 | 0x5E84B511 | | | grantUserRoles | 0x8A6C5203 | 0x06DECF4C | | | revokeUserRoles | 0x236419AE | 0x8766C78C | | | getDataCount | 0x30A76B38 | 0xB4385765 | | | getDataList | 0x948F88A4 | 0x6AF9402E | | | queryUserRole | 0x114003C0 | 0x71F7025C | | | revokeUserManagePermission | 0xFC4EB482 | 0xA4FF64C2 | 其中DREvidenceRightController对应的方法签名如下表所示: | 合约名称 | 对应的函数名称 | 非国密版本签名 | 国密版本签名 | | ------------------------- | -------------------------- | -------------- | ------------ | | DREvidenceRightController | addDataRightEvidence | 0x9D121B95 | 0xD7FCB791 | | | appendVariableData | 0x7F762875 | 0x4D97DA50 | | | getDataRightEvidence | 0x242A81D2 | 0x1EEFFEFE | | | getUdriByDatahash | 0x25C5A118 | 0xDE1E5C90 | | | getUserDataRight | 0x41E0737D | 0x474768BD | | | withdrawDataRight | 0xCD638B2B | 0xDD786933 | | | withdrawUserDataRight | 0xFB0A9583 | 0xA8666327 | | | grantUserDataRight | 0xC234F913 | 0xC82AB813 | | | genDataRightEidViaUrdi | 0xF2829BBC | 0x5B1E0896 | | | getDataRightEvidenceViaEid | 0x8F2A92CC | 0x25AB2025 | 其中DREvidenceReviewController对应的方法签名如下表所示: | 合约名称 | 对应的函数名称 | 非国密版本签名 | 国密版本签名 | | -------------------------- | --------------------------- | -------------- | ------------ | | DREvidenceReviewController | addReviewEvidence | 0xEFDDD7F8 | 0x2DB3C636 | | | getReviewCount | 0x588F695D | 0x4F4A0222 | | | getReviewCountOfReviewer | 0xE6947731 | 0xA87808D8 | | | getVerifyEvidence | 0x6E963A59 | 0xF216DFF3 | | | getVerifyEvidenceOfReviewer | 0x5EDEA296 | 0xD1243968 | | | withdrawReviewEvidence | 0x378D85FA | 0x84E38262 | | | getReviewEvidenceViaEid | 0x7D3DFE7D | 0x617DED3A | | | genReviewEid | 0x8E7DAF82 | 0xF6423918 | #### 2 设置数据权限类别 ```bash function setDataRightCategory(string[] memory fields) ``` 该接口需通过DREvProxy调用,目前支持的数据权限类别有 hold,process,operate三类. #### 3 设置某种存证类别的 variableData 支持的字段 ```bash function setDataRightSupportVariableDataFields(string memory category, string[] memory fields) ``` 目前支持的存证类别有right,review两类. 该接口需通过DREvProxy调用,目前支持的variableData字段暂定有extendDataHash, extendDataUrl. ## 合约升级 该系统扩展了 OpenZeppelin 的 `TransparentUpgradeableProxy` 模式进行可升级性。要升级智能合约,请按照以下步骤操作: 1. 创建具有所需更改的Controller逻辑合约新版本(目前支持DREvidenceAdminController,DREvidenceUserController,DREvidenceRightController,DREvidenceReviewController)。 2. 编译更新后的智能合约: 3. 部署新的Controller逻辑合约: 4. 通过DREvProxyAdmin的setSelectors来更新 `DREvProxy` 合约以指向新的逻辑合约, 这将升级代理合约以使用新的逻辑,同时保留现有的存证记录。 ## 贡献代码 我们欢迎对此项目进行代码贡献。如果您想做出贡献,请遵循以下步骤: 1. Fork 仓库。 2. 创建一个带有描述性名称的新分支。 3. 将您的更改提交到新分支。 4. 向主仓库提交Pull Request。 请确保您的代码记录完整且包含适当的测试。我们的维护者将审查Pull Request并提供反馈或合并更改。 如有关于此项目的问题或讨论,请随时提出问题。 ## 使用安全 在使用此数字资产存证合约时,请考虑以下方面: 1. **角色管理**:确保谨慎管理角色分配(`DEFAULT_ADMIN_ROLE`,`APPROVER_ROLE`,`DAEVIDENCE_ROLE`)。将具有 `DEFAULT_ADMIN_ROLE` 和 `APPROVER_ROLE` 的用户数量限制在最低,以降低未经授权访问的风险。 2. **合约升级**:在升级智能合约时,请确保新的逻辑不会引入漏洞或回归。最好的做法是让独立的安全专家对更新的合约进行审计。 3. **数据验证**:存证依赖于Hash的证据数据。确保将要提交给系统的数据使用安全且广泛认可的哈希算法(如sm3或sha256)进行哈希处理。 4. **访问控制**:在授予或撤销角色时要谨慎,尤其是 `APPROVER_ROLE`,因为它可以向其他用户授予或撤销 `DAEVIDENCE_ROLE`。 5. **隐私**:存储在区块链上的数据是透明且不可更改的。确保不在存证记录中包含敏感或私人信息。 ## 项目支持 如果您在使用此存证系统时遇到任何问题或需要协助,请随时提交Issues。我们的团队将非常乐意帮助您。 ## 未来改进 我们将持续改进这个存证系统。计划中的改进包括: 1. 增加合约到FiscoBcos的部署脚本。 2. AccessController中的管理的地址与区块链身份系统相关联 我们欢迎社区对新功能和改进提供反馈和建议。请随时提出问题或提交带有您的想法的Pull Request。 ## 开源许可 本项目使用MIT License授权。