# solidity-solib **Repository Path**: Profounder/solidity-solib ## Basic Information - **Project Name**: solidity-solib - **Description**: InduFi:供应链的产业链、信用链一体化智能合约库 Solib:基于Solidity语言的扩展库 - **Primary Language**: HTML - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2022-11-28 - **Last Updated**: 2024-05-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # InduFi 供应链的产业链、信用链一体化智能合约库 ## 系统需求 * pragma Solidity >=0.4 <0.8; ## 目的 * 为供应链提供产业链、信用链一体化智能合约库 ## 使用方法 1. 各企业各自初始化。 ```solidity FirmFacade facadeA = new FirmFacade("123456789012345678", "Firm Name"); ``` 手工设置:服务根聚合(ServiceRoot)的合约地址的合约地址,初始化回调根聚合(CallbackRoot)的设置。 2. 各企业各自发布产品供应要约。 ```solidity address productAddressA1 = facadeA.getRepositoryRoot().installProductOfferRepository("Product Name #1"); ProductOfferRepository productA1 = ProductOfferRepository(productAddressA1); productA1.setDeliveryTuple("箱", "20瓶/箱", 5); // 至少5箱发货、起运 productA1.setPriceTuple(12000); // 120元(12000分) productA1.setControlTuple(block.timestamp, CommonLibrary.THRU_DATE_TIME, false); // 从当前时间戳开始,到系统默认的截止时间戳(THRU_DATE_TIME)为止,关闭失效标志。 address productAddressA2 = facadeA.getRepositoryRoot().installProductOfferRepository("Product Name #2"); ``` 3. 销售方主动与采购方签订销售采购协议。 ```solidity address(facadeB).delegatecall( CommonLibrary.getFunctionSelector("supplierSetupAgreement(address,address,address,uint256,uint256,uint256)"), address(facadeA), // 供应商 address(facadeB), // 采购方 productAddressA1, // 供应商对外销售、采购方对外采购的产品 block.timestamp, // 定价有效期的起始时间戳 CommonLibrary.THRU_DATE_TIME, // 定价有效期的结束时间戳 10000 // 价格(以分为单位) ); ``` 4. 采购方获取未签订的销售采购协议,并逐一签订。 ```solidity address[] facadeAUnsignedAgreementRepositoryAddresses = facadeA.getRepositoryRoot().getProcurementAgreementListRepository().getPurchaserUnsignedAgreementRepositoryAddresses(); for (uint256 i = 0; i=0.4 <0.8; ## 目的 * 为Solidity提供基础扩展库 * 需要达到企业级品质 - 功能需求:有自动化测试用例,并全部通过测试。 - 兼容性需求:有明确的版本兼容需求。 - 性能需求:不做特殊要求,在满足功能需求的前提下(自动化测试用例全部通过),具备持续调优的基础。 ## 使用方法 ```solidity import { AddressLibrary } from "../lib/solib/AddressLibrary"; import { AddressArrayLibrary } from "../lib/solib/AddressArrayLibrary"; import { BoolLibrary } from "../lib/solib/BoolLibrary"; import { BytesLibrary } from "../lib/solib/BytesLibrary"; import { IntLibrary } from "../lib/solib/IntLibrary.sol"; // 为8(含)到256(含)之间能整除8的整数 import { StringLibrary } from "../lib/solib/StringLibrary.sol"; import { Uint128Library } from "../lib/solib/UintLibrary.sol"; using AddressLibrary for address; using AddressArrayLibrary for address[]; using BoolLibrary for bool; using BytesLibrary for bytes; using IntLibrary for int; using StringLibrary for string; using UintLibrary for uint; ``` ## 内容 ### address * toBytes20() returns (bytes20) 将地址转换成bytes20 * toBytes() returns (bytes20) toBytes20()方法的别名 * toString() returns (string) 转换成0x开始的16进制字符串,共42字节 ### address[] * contains(address inAddress) returns (bool) 判断地址数组是否包含给定的地址。 * add(address inAddress) returns (bool) 将给定的地址添加到自身地址集合中。如果地址已存在,则不会重复添加。 * remove(address inAddress) 将给定的地址从自身地址集合中移除。 * paginate(uint256 limit, uint256 offset) returns (address[] memory) 根据给定的读取数量和跳过数量,从自身地址集合中,返回地址的数组。 * equals(address[] memory inThat) returns (bool) 判断地址数组自身是否等于给定的地址数组。 ### bool * toString() returns (string) 转换成"true"或"false" ### bytes * equals(bytes that) returns (bool) 比较两个动态字节数组是否相等 * toInt() returns (int256) 解析成整数,非数字字符被忽略跳过 * toString() returns (string) 转换成字符串 ### bytes20 * toAddress() returns (address) 转换成地址 ### int 为8(含)到256(含)之间能整除8的整数 * toString() returns (string) 转换成字符串 ### string * equals(string that) returns (bool) 比较两个字符串是否相等 * toInt() returns (int256) 解析成整数,非数字字符被忽略跳过 ### uint 为8(含)到256(含)之间能整除8的整数 * toInt() returns (int) 转换成有符号整数,uint256不能被转换成int256 * toString() returns (string) 转换成字符串 # 出口许可 无论是采用开源授权的开源软件,还是采用商业授权的商业软件,未经过杜桁枫的同意,均不得将软件源代码或其衍生作品存储于中华人民共和国的国境之外。