1 个不稳定版本
0.1.0 | 2021年1月27日 |
---|
#18 in #rosetta
150KB
3.5K SLoC
Rosetta Solana
ROSETTA-SOLANA 被视为 alpha 软件版本。使用风险自担!
概述
rosetta-solana
提供了 Rust 语言的 Solana 版 Rosetta API 的参考实现。如果您还没有听说过 Rosetta API,可以在 这里 找到更多信息。
特性
- Rosetta API 实现(数据 API 和构造 API)
- 无状态、离线、基于曲线的交易构造
- 使用元数据简化了替代操作结构
- 支持大多数系统 SPL 指令
用法
根据 Rosetta API 原则,所有 Rosetta 实现都必须通过 Docker 部署,并支持在线或离线模式运行。
Docker 安装
运行以下命令将创建一个名为 rosetta-solana:latest
的 Docker 镜像。
从源代码安装
在克隆此仓库后,运行
docker build -t rosetta-solana .
docker-compose up
直接安装
在克隆此仓库后,运行
cargo run build --release
使用 rosetta-cli 进行测试
为了验证 rosetta-solana
,请安装 rosetta-cli
并运行以下命令之一
rosetta-cli check:data--configuration-file rosetta-cli-conf/devnet.json
rosetta-cli check:construction--configuration-file rosetta-cli-conf/devnet.json
注意:如果 cli 测试出现 EOF 错误,可能是由于 golang 尝试重用连接而服务器关闭了连接。出于这个原因,我已禁用 keep-alive。建议以 dev 模式运行 cli 测试。
开发
cargo run
运行服务器cargo run test
运行测试cargo docs
创建文档
详细信息
实现的端点
/network/list (network_list)
/network/options (network_options)
/network/status (network_status)
/account/balance (account_balance)
/block (get_block)
/block/transaction (block_transaction)
/call (call)
/construction/combine (construction_combine)
/construction/derive (construction_derive)
/construction/hash (construction_hash)
/construction/metadata (construction_metadata)
/construction/parse (construction_parse)
/construction/payloads (construction_payloads)
/construction/preprocess (construction_preprocess)
/construction/submit (construction_submit)
默认环境变量
RPC_URL = "https://devnet.solana.com"
NETWORK_NAME = "devnet"
HOST = "127.0.0.1"
PORT = "8080"
MODE = "online" //online/offline
支持的操作
查看 types::OperationType
以查看当前支持的所有操作的全列表。此列表可能不是最新的。
System__CreateAccount,
System__Assign,
System__Transfer,
System__CreateNonceAccount,
System__AdvanceNonce,
System__WithdrawFromNonce,
System__AuthorizeNonce,
System__Allocate,
SplToken__InitializeMint,
SplToken__InitializeAccount,
SplToken__CreateToken,
SplToken__CreateAccount,
SplToken__Transfer,
SplToken__Approve,
SplToken__Revoke,
SplToken__MintTo,
SplToken__Burn,
SplToken__CloseAccount,
SplToken__FreezeAccount,
SplToken__ThawAccount,
SplToken__TransferChecked,
SplToken__CreateAssocAccount,
Stake__CreateAccount,
Stake__Delegate,
Stake__Split,
Stake__Merge,
Stake__Authorize,
Stake__Withdraw,
Stake__Deactivate,
Stake__SetLockup,
Vote__CreateAccount,
Vote__Authorize,
Vote__Withdraw,
Vote__UpdateValidatorIdentity,
Vote__UpdateCommission,
Unknown,
简单操作
此实现还支持仅使用元数据写入操作。对于简单的转账交易,用户可以简单地写入一个操作并填写其元数据,例如 source
、destination
、authority
、lamports
。
例如:
[
Operation{
account: {address: "Sender"},
amount: { value: "-10",...},
...
},
Operation{
account: {address: "Receiver"},
amount: {value: "10",...},
...
}
]
[
Operation{
metadata: {
source: "Sender",
destination: "Receiver",
lamports: 10
},
...
},
]
这两个操作是相同的,尽管第一个(Rosetta规范)总是覆盖第二个。
nonce转账
要发送带有nonce的交易,您需要在construction_preprosess中添加元数据,如下所示:{"metadata": {"with_nonce": {"account": "address of nonce account"}}}
余额变更操作
有关余额变更操作的列表,请参阅 src/types.rs
中的 OperationType
实现。根据操作,它们可能还需要额外的元数据。仅更改费用的操作不被视为余额变更操作。仅有一个余额变更且没有相等相反签名操作的也并非余额变更,例如铸币或销毁。
示例
查看 src/construction.rs
中的测试以查看完整的示例。
待办事项
- 将可选的承诺选项添加到每个接受的操作中
- 为每个操作类型进行所有预处理元数据提取
- 每个操作类型的文档
- 支持所有操作类型
- 更好的错误处理
许可证
此项目在Apache 2.0许可证的条款下提供开源。
依赖项
~79MB
~1.5M SLoC