126 个版本
0.3.0 | 2024 年 8 月 6 日 |
---|---|
0.2.23-rc1 | 2024 年 5 月 10 日 |
0.2.22 | 2024 年 3 月 12 日 |
0.2.18 | 2023 年 12 月 28 日 |
0.1.36 | 2022 年 7 月 25 日 |
#887 in 魔法豆
689 每月下载量
用于 3 crates
445KB
9K SLoC
injective-cosmwasm
◦ injective-cosmwasm
📖 目录
📍 简介
injective-cosmwasm
是为了与 Injective 链集成而设计的,从而实现智能合约交互和复杂的金融操作。它是一个用于与 CosmWasm 智能合约一起使用的基于 Rust 的库。它提供了对 Injective 特定查询和消息的绑定,以及一些辅助工具。
📦 功能
异常
📂 仓库结构
└── /
├── Cargo.toml
└── src/
├── authz/
│ ├── mod.rs
│ └── response.rs
├── exchange/
│ ├── cancel.rs
│ ├── derivative.rs
│ ├── derivative_market.rs
│ ├── market.rs
│ ├── mod.rs
│ ├── order.rs
│ ├── privileged_action.rs
│ ├── response.rs
│ ├── spot.rs
│ ├── spot_market.rs
│ ├── subaccount.rs
│ └── types.rs
├── exchange_mock_querier.rs
├── lib.rs
├── msg.rs
├── oracle/
│ ├── mod.rs
│ ├── response.rs
│ ├── types.rs
│ └── volatility.rs
├── querier.rs
├── query.rs
├── route.rs
├── test_helpers.rs
├── tokenfactory/
│ ├── mod.rs
│ ├── response.rs
│ └── types.rs
├── vesting/
└── wasmx/
├── mod.rs
├── response.rs
└── types.rs
⚙️ 模块
根目录
文件 | 摘要 |
---|---|
Cargo.toml | 该Rust代码配置了一个名为 injective-cosmwasm 的软件包,该软件包旨在为CosmWasm合约提供与Injective Core自定义模块交互的绑定。由InjectiveLabs的贡献者编写,它是开源的,并遵循Apache 2.0许可证。该库使用2021版的Rust,并包括用于区块链和序列化功能的各种依赖项,如cosmwasm-std 和 serde 。它支持中止、迭代器和Stargate等功能,并与多个CosmWasm版本兼容。 |
源代码
文件 | 摘要 |
---|---|
route.rs | 该代码定义了一个 InjectiveRoute 枚举,它代表Injective协议的不同查询路由路径,例如 Authz 、Exchange 、Tokenfactory 、Staking 、Oracle 和 Wasmx 。它使用不区分大小写的格式进行序列化,适合URL路径段,可用于在项目目录内将查询类型与其相应的模块相匹配。提供的目录树表明该项目是一个基于Rust的交易/金融应用,重点关注授权、市场交换和预言机等领域。 |
lib.rs | 该代码是一个Rust模块,它定义了一个支持injective协议的区块链上交易平台的公共接口和依赖项。它导出用于处理衍生品和现货市场的类型、消息和查询,包括订单创建、取消和头寸管理。该模块还处理预言机价格流、市场查询和授权(授权)功能。测试实用程序包含在内,但受非WASM目标条件的限制。核心功能如市场数据、账户管理和交易执行封装在单独的子模块中。该平台通过指定的查询和消息系统与外部的Injective区块链协议接口。 |
query.rs | 此Rust代码定义了一个用于Injective协议的自定义查询系统,处理与授权(authz)、交易所操作(包括现货和衍生品市场、订单、取消、头寸和定价)、质押、预言机数据协调以及特定Web汇编模块信息(wasmx)相关的查询。它通过InjectiveQuery 模型一系列封装的请求,可以查询交易平台内的各种参数和状态。这些包括用户权限、市场详细信息、订单簿、交易量、定价、预言机波动性和合同细节,所有这些都可以通过具有不同路由的InjectiveQueryWrapper 访问。 |
test_helpers.rs | 在Rust项目中,test_helpers.rs 模块提供了基于区块链的交易所平台的测试实用程序。它包括测试市场ID和合约地址的常量,以及生成模拟测试环境(inj_mock_env )、操作依赖项(OwnedDepsExt )以及创建MockApi 、MockStorage 和自定义查询器(inj_mock_deps )的函数。此外,它还提供了创建具有预定义参数以测试市场操作的模拟现货市场实例(create_mock_spot_market )的方法。该模块针对非WebAssembly目标进行设计,并利用cosmwasm_std 和injective_math 包进行区块链和数学运算。 |
msg.rs | 该代码为区块链相关应用程序提供了一套消息构建器,特别针对Cosmos SDK,并针对Injective协议进行了定制。它定义了一个InjectiveMsg 枚举,包含各种交易类型,用于管理子账户、代币转账、订单创建/取消、市场操作以及现货和衍生品市场的管理操作。此外,它还提供了创建Cosmos消息的函数,这些消息封装在InjectiveMsgWrapper 中,可以在区块链网络中分发。代码处理存款、取款、子账户转账、现货和衍生品市场订单、清算、放弃奖励和合同激活等功能。它还包括自定义序列化和与区块链查询和执行层的集成。 |
querier.rs | 提供的Rust代码定义了一个InjectiveQuerier 结构体,提供各种查询区块链数据的方法,与Authz 、Exchange 、Oracle 、Tokenfactory 和Wasmx 等模块进行交互。这些方法组装请求,查询诸如授权权限、交易所参数、市场信息、存入资金、订单簿、市场波动性和预言机价格等内容。查询器旨在通过将查询转换为底层基础设施可以理解的请求的包装器,简化对区块链状态的访问。代码确保了类型安全和与区块链不同部分的模块化交互。 |
exchange_mock_querier.rs | 此Rust模块提供模拟查询器(WasmMockQuerier ),用于模拟在交易平台测试期间的区块链查询。查询器可以处理各种金融和区块链相关查询,包括市场数据(现货和衍生品)、订单簿、账户余额、代币供应和预言机价格。它使用模拟API和存储来模拟区块链的行为,利用InjectiveQueryWrapper 类型来表示针对Injective协议的特定查询功能。 |
Wasmx
文件 | 摘要 |
---|---|
response.rs | 提供的Rust项目结构实现了一个具有授权、市场处理(现货和衍生品)、子账户和数据预言机的交易平台。它包括用于测试的模拟查询器和用于消息路由、查询和辅助模块的辅助模块。代码片段定义了用于在wasmx 模块中查询合同注册信息的可序列化响应类型,包括可选的RegisteredContract 。 |
types.rs | 代码在Rust中定义了用于在区块链平台上管理智能合约的数据结构。它包括一个用于资金模式(FundingMode )的枚举,具有如SelfFunded 和GrantOnly 等选项,以及一个描述合同属性(如气体限制、价格、可执行性和管理控制)的结构体(RegisteredContract )。RegisteredContract 还包括可选字段,用于指定代码标识符和管理员或授权者地址,通过serde 和JsonSchema 支持序列化以实现JSON兼容性。 |
mod.rs | 这个Rust项目被结构化为多个模块,用于处理交易平台的各个方面。核心功能可能包括授权(authz )、现货和衍生品市场的交易操作(exchange )、查询链下数据(oracle )、测试用的模拟(exchange_mock_querier )、消息处理(msg )以及智能合约交互的抽象(wasmx )。每个模块都包含其领域特定的类型和响应。主库的入口点是lib.rs ,而mod.rs 文件用作模块声明。 |
交易所
文件 | 摘要 |
---|---|
response.rs | Rust代码定义了在加密交易平台上使用的各种响应结构的序列化。这些响应包括交易所参数、子账户存款、仓位、市场信息(现货和衍生品)、订单详情、市场价格、波动性统计数据、质押金额、订单簿、总成交量、货币的小数位数和费率乘数。每个结构都是可序列化的,使用库serde 和schemars ,并根据预期的数据包含可选或向量类型属性,以返回与加密交易相关的查询。 |
types.rs | types.rs 中的代码使用与CosmWasm兼容的智能合约平台定义了多个用于加密货币交易所系统的数据结构。关键结构包括:-Params :配置交易所参数,如费用、保证金比例和不同交易和上市操作的访问级别。-Deposit :表示子账户的存款详情,包括可用余额和总余额。-DenomDecimals :存储货币单位的十进制精度。-PriceLevel :表示价格水平,包含价格(p)和数量(q)。-VolumeByType :区分做市商和交易量。-MarketVolume :将VolumeByType 与市场标识符结合。-MarketType :枚举区分现货和衍生品市场。-AtomicMarketOrderAccessLevel :用于市场订单访问控制的枚举。-MarketId :表示市场ID,带有0x前缀和固定长度的检查。-SubaccountId :表示子账户ID,具有与MarketId 类似的验证。-ShortSubaccountId :缩短子账户ID以快速访问,具有验证和序列化方法。-Hash :封装32字节的哈希,允许进行十六进制转换。代码通过自定义序列化和反序列化逻辑确保数据完整性,并提供涉及市场和子账户ID的数据操作的辅助函数和方法。它还包括详细的单元测试,以验证这些组件的正确性。 |
market.rs | market.rs 文件定义了一个表示市场各种状态的MarketStatus 枚举,以及一个概述金融交易所系统中市场实体基本功能的GenericMarket 特质。这包括检索市场标识符、状态、标价信息、费率率和最小报价增量。MarketStatus 有五种状态,包括默认的Unspecified 。与市场相关的属性和操作以抽象操作的形式给出,可能由特定市场类型实现。 |
order.rs | 该代码为在Cosmos SDK构建的加密货币交易所系统中管理和查询订单数据提供了结构和功能。它包括用于订单买卖方向的枚举OrderSide 和用于订单类型的枚举OrderType ,具有序列化选项;如OrderData 、ShortOrderData 、OrderInfo 和ShortOrderInfo 等结构体,用于存储订单详细信息,并具有转换实现;GenericOrder 和GenericTrimmedOrder 特质定义了不同订单类型的通用行为;以及一个测试用例确保OrderType 的正确序列化。它利用外部库如cosmwasm_std 、injective_math 和serde 进行区块链交互、精确的小数运算和JSON序列化。 |
derivative_market.rs | 提供的Rust代码定义了在交易平台上管理衍生品市场的数据结构和实现。它包括永续市场的细节,如资金利率和间隔,以及全面的市场信息,如交易标、费用、保证金比例和状态。衍生品市场也可以是永续的,其定价与一个预言机系统相关联。这些结构是可序列化的,并包括用于访问关键市场参数(如费用、交易标和状态)的特质,确保与更广泛系统功能的集成。 |
cancel.rs | 提供的Rust模块cancel.rs 定义了一个具有序列化能力的枚举CancellationStrategy ,表示在交易交换环境中取消订单的策略。这些策略包括取消未指定的订单、从最差到最好的价格条件,以及从最好到最差的价格条件。此代码是关注加密货币交易所操作的大型项目结构的一部分,包括授权、市场类型、订单管理和辅助服务等。 |
subaccount.rs | 该代码定义了在交易系统中管理子账户ID的函数,特别是将可读的、Bech32 Cosmos地址和以太坊十六进制地址之间进行转换。它从Cosmos地址生成一个唯一的子账户ID,使用可选的非重复值。它还根据其非重复值检查子账户ID是否是默认的,并将子账户ID转换为以太坊或Bech32 Cosmos地址。包含的测试验证这些转换操作。错误处理假定有效输入,否则失败。 |
spot_market.rs | 提供的Rust代码定义了一个具有金融现货市场属性的SpotMarket 结构体,包括费用、货币单位和刻度大小,并实现了GenericMarket 特质以实现通用市场操作。它还包括一个calculate_spot_market_id 函数,根据基货币单位和报价货币单位的串联使用Keccak散列生成市场ID。一个测试验证了给定基货币单位和报价货币单位的ID生成正确性。整个代码是更大应用程序中交易所模块的一部分,可能与其相关加密货币交易。 |
mod.rs | 提供的代码结构代表一个专注于加密货币交易所功能的Rust项目。在src/exchange/mod.rs 中定义的exchange 模块是应用程序的核心部分,组织相关的交易所功能,如订单管理、市场类型(现货和衍生品市场)、子账户以及订单的取消和特权操作等。每个功能都在exchange 目录中拥有专门的模块,表明这是一个模块化代码库,旨在处理加密货币交易所平台内的各种交易操作。 |
derivative.rs | 该Rust代码定义了衍生品交易所系统中管理订单和持仓的数据结构和方法。它包括诸如 Position 、DerivativePosition 、DerivativeOrder 、EffectivePosition 、ShortDerivativeOrder 、DerivativeLimitOrder 和 DerivativeMarketOrder 等类型,以及 GenericOrder 和 GenericTrimmedOrder 等特性。持仓可以计算带有或没有资金的价值,应用资金,并由市场和子账户标识。订单包括订单类型、价格、数量、保证金和可选触发价格。可以检查订单的有效性,确定它们是买入/卖出、仅限减少、仅限挂单还是原子性的,并且可以转换为简化的形式。封装了放置、管理和评估衍生品交易合同的功能,包括创建新订单、计算持仓或订单价值以及应用资金调整等操作。 |
spot.rs | 该代码使用Rust和与区块链相关的库定义了交易平台上不同类型的现货市场订单的数据结构和行为。 SpotLimitOrder 和 SpotMarketOrder 代表具有订单类型、价格、数量、可填充性和触发价格等属性的限价订单和市价订单。 SpotOrder 封装了基本订单详情,但不包含可填充的数量,而 ShortSpotOrder 则是 SpotOrder 的更简洁版本。支持订单类型之间的转换。订单特性实现提供常见行为以确定订单特征(例如,买入/卖出、类型、价格)。MsgCreateSpotMarketOrderResponse 封装了创建市价订单的响应,包括订单哈希和执行结果。 |
privileged_action.rs | Rust模块 privileged_action.rs 定义了在金融交易所环境中表示合成交易和持仓转移的数据结构,利用自定义的定点十进制类型以提高精度。SyntheticTrade 包含交易详情,SyntheticTradeAction 聚合用户和合约交易,而 PositionTransferAction 描述了将持仓从一个子账户转移到另一个子账户的过程。PrivilegedAction 可选地结合合成交易和持仓转移。此外,还有一个实用函数 coins_to_string ,用于将 Coin 对象的列表转换为逗号分隔的字符串。 |
Oracle
文件 | 摘要 |
---|---|
response.rs | 该Rust代码定义了两个用于表示Oracle响应的数据结构,分别是 OraclePriceResponse 和 PythPriceResponse ,它们包含表示价格对和Pyth价格状态的可选字段。这两个结构都是可序列化的,便于与基于JSON的协议兼容以及为API文档生成架构。这是更大金融交易平台的一部分,如目录结构所示,包括授权、市场交换类型、Oracle和令牌工厂等模块。 |
types.rs | 提供的代码定义了在基于Rust的区块链或金融应用程序中查询和处理Oracle价格数据的数据结构。它包括表示Oracle信息、历史期权和响应的类型,包括波动性和定价数据。还有各种Oracle类型,以及Pyth特定的类型,它们封装了单个价格证明、市场状态和聚合定价数据。这些结构的共同主题是序列化和架构支持,可能用于网络通信或与区块链交互。 |
volatility.rs | 《volatility.rs》模块定义了结构来建模和序列化与Rust项目中以交易所操作为重点的预言机相关的元数据统计、交易历史选项、价格和交易记录。这些实体包括计数、样本大小、平均值、时间戳、价格统计、交易分组、原始历史包含和交易资产数量,利用《FPDecimal》提供金融精度。 |
mod.rs | 目录结构表明这是一个Rust项目,包含多个模块,专注于交易交易所,具有现货和衍生品市场的功能、授权以及外部数据的预言机。《src》目录包含主要库和模块,每个模块都有响应处理程序和类型定义。《oracle/mod.rs》文件作为预言机模块的声明,引入了响应处理、类型和与波动性相关的功能。 |
Tokenfactory
文件 | 摘要 |
---|---|
response.rs | 代码定义了两个Rust数据结构,用于表示基于区块链的令牌工厂模块的响应,使用标准序列化库。《TokenFactoryDenomSupplyResponse》封装了令牌面额的总供应量,而《TokenFactoryCreateDenomFeeResponse》详细说明了创建新令牌面额所需的费用,两者都是《Coin》结构的向量。这些结构是更大金融交易平台的一部分,如authz、exchange和oracle等兄弟目录所示。 |
types.rs | 提供的目录树结构概述了一个Rust项目,包括用于依赖项管理的Cargo.toml。源文件夹(src)包含多个模块,包括authz、exchange、oracle、tokenfactory、vesting和wasmx,每个模块都致力于不同的功能,如授权、交易机制、对预言机的查询、令牌工厂操作、归属计划以及与WebAssembly模块的交互。指定的文件(src/tokenfactory/types.rs)可能包含用于在系统中创建和管理令牌的tokenfactory模块的类型定义。 |
mod.rs | 代码代表了一个模块化的Rust项目结构,用于具有授权、包括衍生品和现货市场的交换功能以及数据服务的预言机的交易平台。组件包括市场管理、订单处理、特权操作、类型定义、模拟查询器、消息传递、查询、路由和令牌工厂管理。特定的文件《src/tokenfactory/mod.rs》声明了作为令牌工厂子系统的《response》模块。 |
Authz
文件 | 摘要 |
---|---|
response.rs | 代码定义了Rust数据结构,用于表示和序列化授权和相关的响应,包括分页。它包括《Grant》结构,详细说明了具有到期时间的授权,以及扩展《Grant》以包含授予者和受让人信息的《GrantAuthorization》。此外,《PageResponse》促进了分页结果,而《GrantsResponse》、《GranteeGrantsResponse》和《GranterGrantsResponse》将授权数据包装在分页细节中。这些结构使用Serde进行序列化和反序列化,使用Schemars进行JSON模式表示。 |
mod.rs | 代码结构表明这是一个以加密货币交易所平台为重点的Rust项目。具体来说,《src/authz/mod.rs》暗示授权模块可能处理权限和安全,并导入《response.rs》,这可能定义了授权操作的响应结构或枚举。其他目录如《exchange》、《oracle》和《tokenfactory》暗示了交易、市场数据和令牌管理的功能,而《vesting》和《wasmx》暗示了令牌归属和可能的WebAssembly集成功能。 |
🚀 入门
依赖项
请确保您已在系统上安装以下依赖项
-ℹ️ 依赖项1
-ℹ️ 依赖项2
-ℹ️...
🔧 安装
- 克隆仓库
git clone ../
- 切换到项目目录
cd
- 安装依赖
cargo build
🤖 运行
cargo run
🧪 测试
cargo test
🤝 贡献
欢迎贡献!以下是一些你可以贡献的方式
贡献指南
点击展开
- 分叉仓库:首先将项目仓库分叉到你的GitHub账户。
- 本地克隆:使用Git客户端将分叉的仓库克隆到你的本地机器。
git clone <your-forked-repo-url>
- 创建新分支:始终在一个新分支上工作,并给它一个描述性的名称。
git checkout -b new-feature-x
- 进行更改:在本地开发和测试你的更改。
- 提交更改:使用清晰简洁的消息提交你的更新。
git commit -m 'Implemented new feature x.'
- 推送到GitHub:将更改推送到你的分叉仓库。
git push origin new-feature-x
- 提交拉取请求:针对原始项目仓库创建PR。清楚地描述更改及其动机。
一旦你的PR被审查并批准,它将被合并到主分支。
依赖项
~4.5–7.5MB
~157K SLoC