Le SDK prend en charge la construction et l'envoi de transactions, et pour interroger divers aspects de la chaîne et du nœud lui-même.
Le SDK version 2 prend en charge à la fois l'ancienne API GRPC de nœud V1 (accessible via le module endpoints
) ainsi que la nouvelle API V2 (accessible via le module v2
). Les nouveaux utilisateurs doivent utiliser l'API car il est plus flexible, a plus de fonctionnalités et fonctionne mieux. L'API V1 sera obsolète dans la prochaine version SDK.
La version minimale prise en charge de la rouille est indiquée dans le manifeste Cargo.toml
. Une bosse MSRV sera accompagnée d'au moins une bosse de version mineure du SDK.
Le SDK est publié sur Crates.io.
cargo add concordium-rust-sdk
La structure centrale du SDK est le client qui maintient une connexion au nœud et prend en charge l'interrogation du nœud et lui envoie des messages. Ce client est à moindre coût.
Le Client
est construit à l'aide de la nouvelle méthode.
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 ( ( ) )
}
Les transactions::send
contient des méthodes de construction et d'envoi de transactions. Il existe des transactions::construct
qui peuvent être utilisées si les transactions doivent être construites, mais pas immédiatement signées.
Chaque transaction prise en charge a une méthode pour la construire qui prend des données minimales nécessaires à la transaction. Une fois une transaction construite, elle peut être envoyée au nœud et à la chaîne à l'aide du point de terminaison send_block_item
.
Il existe un certain nombre d'exemples montrant l'utilisation de base des différents points de terminaison. Ils peuvent être trouvés dans le répertoire des exemples.
À titre d'exemple de base, voir V2_SEND_TRANSER pour un exemple complet de construction d'une transaction de transfert et de l'envoi.
Tous les exemples peuvent être compilés avec
cargo build --release --example $NAME
Par exemple
cargo build --release --example v2_send_transfer
La documentation rendue est disponible sur https://docs.rs/concordium-rust-sdk/latest/
Les points de terminaison dans les API V1 et V2 se reflètent pour la plupart. Cependant, certains critères d'évaluation ont été divisés dans l'API V2 pour permettre de demander uniquement les données qui sont généralement nécessaires plus rapidement. Les principales différences sont
Le point de terminaison V1
get_block_summary
a été divisé en
get_block_events
(pour les événements de transaction, c'est-à-dire, les résultats des transactions envoyées par les utilisateurs)get_block_special_events
(pour des événements spéciaux tels que CCD Minting et Delégation / Baker Rewards)get_chain_parameters
pour les paramètres de la chaîneget_update_next_sequence_numbers
pour les numéros de séquence des instructions de mise à jourget_finalization_summary
pour les détails des enregistrements de finalisation dans un bloc. Les informations de nœud ont été consolidées en deux points de terminaison, get_node_info
et get_peers_info
, ce dernier qui renvoie maintenant à la fois la liste des pairs et leurs détails.
Le SDK s'appuie sur les fichiers générés à partir des schémas Protobuf. Ces fichiers sont engagés dans le référentiel afin que les utilisateurs du SDK n'aient pas à faire installer le compilateur Protobuf afin d'utiliser le SDK.
Parfois, il est nécessaire de mettre à jour les fichiers générés, si les schémas changent. Cela peut être fait en compilant le SDK à l'aide de la fonction generate-protos
, c'est-à-dire,
cargo build --features=generate-protos
La mise à jour de ces fichiers ne doit être effectuée que lorsque l'API du nœud, déterminé par les schémas, les modifications et que nous devons prendre en charge la nouvelle API dans le SDK.