3 个版本 (重大更改)
新版本 0.2.0 | 2024 年 8 月 23 日 |
---|---|
0.1.0 | 2024 年 7 月 8 日 |
0.0.0-release | 2024 年 7 月 8 日 |
#59 在 #rest-client
在 3 个crate中使用
42KB
548 行
essential-rest-client
这是一个 Rust 库和 CLI 工具,允许您轻松地向 essential-rest-server 发送 REST 请求。
Essential REST Client
Usage: essential-rest-client [ADDRESS] <COMMAND>
Commands:
deploy-contract Deploy a contract to the server
check-solution Check a solution against the server
check-solution-with-contracts Check a solution against the server with data
submit-solution Submit a solution to the server
solution-outcome Get the outcome of a solution
get-predicate Get a predicate from a contract
get-contract Get a contract from the server
list-contracts List contracts on the server
list-solutions-pool List solutions in the pool on the server
list-winning-blocks List winning blocks on the server
query-state Query the state of a contract
query-state-reads Query the state of a contract by running state read programs
query-predicate Query the state of a contract by running the state read programs in a predicate
query-inline Query the state of a contract by running state read programs with a single solution data input
query-extern Query the state of an external contract by running state read programs. This uses an empty solution that doesnt solve anything. It only makes sense to query state that is in an external contract
help Print this message or the help of the given subcommand(s)
Arguments:
[ADDRESS] Server address to bind to [default: http://0.0.0.0:0]
Options:
-h, --help Print help
-V, --version Print version
Essential REST 客户端
此库提供与 Essential REST 服务器交互的客户端。
部署合约
合约在部署之前必须签名。essential-wallet
可用于签名合约。多次部署同一合约是无效操作。
检查解决方案
这允许在不实际将其包含在区块中的情况下检查乳液。解决方案将使用服务器上当前的状态。任何解决方案解决的合约都必须已经部署。
当您想在提交之前检查解决方案并希望使用服务器上的当前状态时,这非常有用。
使用合约检查解决方案
这允许检查包含解决合约的集合的解决方案。解决方案解决的任何合约都必须包含在合约集合中。解决方案将使用服务器上当前的状态。
当您正在构建尚未准备好部署的合约并希望用解决方案测试它们时,这非常有用。
提交解决方案
这允许提交一个解决方案以便包含在即将到来的区块中。一旦提交解决方案,它就会被添加到池中。区块构建器以常规循环间隔运行,如果解决方案满足约束,则按先进先出(FIFO)顺序将其包含在区块中。
区块构建器在未来可能会变得更加复杂。
请注意,目前如果您提交的解决方案与另一个解决方案冲突,则首先提交的解决方案将被包含在区块中,而另一个解决方案将失败。失败的解决方案不会重试,最终会被删除。
当解决方案基于另一个解决方案已更改的预状态构建时,一个解决方案可能会与另一个解决方案冲突。例如,如果计数器只能增加1,且当前设置为5,那么您提交一个将其设置为6的解决方案,但另一个比您先提交的解决方案将计数器设置为6,那么您的解决方案将无法满足约束。实际上,在这个例子中,除非您将状态变更更新为当前计数+1,否则您的解决方案将永远无法满足。但要做到这一点,您必须重新提交您的解决方案。
两次提交相同的解决方案(即使是由不同的用户)也是幂等的。
解决方案结果
这允许查询解决方案的结果。解决方案要么成功包含在区块中,要么因某种原因失败。
有一点需要记住的是,解决方案不一定唯一。有可能多次提交相同的解决方案。例如,如果计数器示例也允许减1,那么一个解决方案可以将计数从4增加到5,另一个解决方案可以将计数从5减少到4。然后,可以再次提交一个将计数从4增加到5的解决方案。这两个解决方案将具有完全相同的哈希内容。这导致相同的解决方案哈希返回多个结果。
这可能会使您难以知道是您提交的解决方案成功还是失败。但实际上这并不重要,因为对解决方案没有真正的所有权。记住,如果两个相同的解决方案同时提交,那么就相当于只提交了一个。
如果您想知道“我的解决方案是否成功”,那么查询您试图更改的合约的状态可能更有意义。
请注意,这些都非常具体于应用程序。
获取谓词
这允许检索已部署的谓词。如果您想调试解决方案,这可能很有用。
获取合约
这允许检索已部署的合约。与Get Predicate
非常相似,但获取整个合约。
列出合约
这允许列出所有已部署的合约。结果分页,因此您每次查询只能获取最多一定数量的合约。合约也可以根据它们部署的时间范围进行筛选。
列出解决方案池
这允许列出当前池中的所有解决方案。结果也分页。根据解决方案的积压量,单个解决方案可能不会在池中停留很长时间。
列出获胜区块
这允许列出所有已成功创建的区块。结果也分页。区块可以根据时间进行筛选。只有当池中有解决方案时才会创建区块。区块以常规间隔创建。
查询状态
这允许查询合约的状态。这是前端应用程序与状态交互的主要方式。只有在你知道合约的abi时,查询状态才有意义。返回的状态是一个可变大小的单词列表。键也是可变大小的单词列表。要使用此API,你需要知道你正在查询的合约类型。
查询状态读取
这允许使用状态读取程序查询合约的状态。这是一种更高级的查询状态的方法。它允许你使用谓词的状态读取程序来查询合约的状态。还可以编写自定义状态读取程序。Pint可以用来创建自定义状态读取。
如果你在尝试解决一个谓词但需要知道解决方案将读取的先验状态,这个API也非常有用。例如,如果你想运行一个调试器,你需要这个先验状态。
该API可以返回读取的键和返回的值。它还可以返回先验读取和后验读取中读取到状态槽的值。
请注意,它不会返回后验读取中读取的键和值,因为这可以通过在解决方案中使用状态突变轻松地在本地计算。
依赖关系
~7-21MB
~321K SLoC