SDK имеет поддержку для построения и отправки транзакций, а также для запроса различных аспектов цепи и самого узела.
SDK версия 2 поддерживает как старый API grpc Node V1 (доступный через модуль endpoints
), так и новый API V2 (доступный через модуль v2
). Новые пользователи должны использовать API, поскольку он более гибкий, имеет больше функций и работает лучше. V1 API будет устарел в следующей версии SDK.
Минимальная поддерживаемая версия ржавчины указана в манифесте Cargo.toml
. Шах для MSRV будет сопровождаться, по крайней мере, незначительной версией SDK.
SDK публикуется на Crates.io.
cargo add concordium-rust-sdk
Основная структура SDK - это клиент, который поддерживает соединение с узлом и поддерживает запрос узла и отправку сообщений в него. Этот клиент дешево клонирован.
Client
построен с использованием нового метода.
use concordium_rust_sdk :: * ;
# [ tokio :: main ( flavor = "multi_thread" ) ]
async fn main ( ) -> anyhow :: Result < ( ) > {
// Establish a connection to the node running locally and listening on port 20000
let mut client = v2 :: Client :: new ( v2 :: Endpoint :: from_str ( "http://localhost:20000" ) ? ) . await ? ;
// Query consensus information and print it as JSON
let consensus_info = client . get_consensus_info ( ) . await ? ;
println ! ( "{}" , serde_json::to_string_pretty ( &consensus_info ) .unwrap ( ) ) ;
Ok ( ( ) )
}
transactions::send
содержит методы для построения и отправки транзакций. Существует сопутствующее модульное transactions::construct
, которая может быть использована, если необходимо построить транзакции, но не сразу подписано.
Каждая поддерживаемая транзакция имеет метод для его построения, который принимает минимальные данные, необходимые для транзакции. Как только транзакция построена, ее можно отправить в узел и цепочку, используя конечную точку send_block_item
.
Есть ряд примеров, показывающих основное использование различных конечных точек. Их можно найти в каталоге примеров.
В качестве основного примера, см. V2_SEND_TRANSFER для полного примера построения трансферной транзакции и отправки ее.
Все примеры могут быть скомпилированы с
cargo build --release --example $NAME
например
cargo build --release --example v2_send_transfer
Оформленная документация доступна по адресу https://docs.rs/concordium-rust-sdk/latest/
Конечные точки в API V1 и V2 по большей части отражают друг друга. Однако некоторые конечные точки были разделены в API V2, чтобы сделать возможным только данные, которые обычно требуются быстрее. Основные различия
Конечная точка V1
get_block_summary
была разделена на
get_block_events
(для событий транзакций, то есть результаты транзакций, отправленных пользователями)get_block_special_events
(для специальных событий, таких как майнинга ПЗС, и награды делегирования/Бейкер)get_chain_parameters
для параметров цепиget_update_next_sequence_numbers
для номеров последовательностей инструкций об обновленииget_finalization_summary
для деталей записей о завершении в блоке. Информация о узле была объединена в две конечные точки, get_node_info
и get_peers_info
, последняя из которых теперь возвращает как список сверстников, так и их детали.
SDK опирается на файлы, сгенерированные из схемы Protobuf. Эти файлы привержены репозиторию, так что пользователи SDK не должны устанавливать компилятор Protobuf для использования SDK.
Иногда необходимо обновлять сгенерированные файлы, если схемы изменяются. Это может быть сделано путем составления SDK с помощью функции generate-protos
, т.е.
cargo build --features=generate-protos
Обновление этих файлов должно быть сделано только тогда, когда API узла, определяемый схемами, изменения, и мы должны поддерживать новый API в SDK.