Soumission d'extrinsic avec nonce manuel

Sur ma branche hugo-dev, j’ai implémenté de manière rudimentaire une commande pour proposer un call au comité technique : src/commands/collective.rs · hugo-dev · clients / Rust / Ğcli-v2s · GitLab

Mais j’ai l’erreur “transaction is outdated

Subxt(Rpc(ClientError(Call(ErrorObject { code: ServerError(1010), message: "Invalid Transaction", data: Some(RawValue("Transaction is outdated")) }))))

une erreur substrate liée à une transaction périmée, par exemple si le nonce est trop petit.

J’ai donc tenté une implémentation alternative (technical_committee_propose_nonce) qui permet de donner un nonce custom. Les transactions sont bien soumises au réseau (si j’envoie plusieurs fois une transaction je peux avoir :

# Transaction Already Imported
Subxt(Rpc(ClientError(Call(ErrorObject { code: ServerError(1013), message: "Transaction Already Imported", data: Some(RawValue("Any { .. }")) }))))
ou
# Transaction is temporarily banned
Subxt(Rpc(ClientError(Call(ErrorObject { code: ServerError(1012), message: "Transaction is temporarily banned", data: None }))))

), mais à la première soumission, la fonction ne retourne jamais et je ne comprends pas pourquoi.


Pour info, voulant mettre 5CfodrEFe64MJtWvfhTHYBuUySr4WXLv2B41mZFucTXSGMFA comme clé sudo, j’ai fait :

> subkey inspect
URI: <mnemonic>
Secret phrase:       <secret>
  Network ID:        substrate
  Secret seed:       <secret>
  Public key (hex):  0x1ac50afda84f433ad094930ff4f1057c03f33bb11ae6956c33bde02661348d1d
  Account ID:        0x1ac50afda84f433ad094930ff4f1057c03f33bb11ae6956c33bde02661348d1d
  Public key (SS58): 5CfodrEFe64MJtWvfhTHYBuUySr4WXLv2B41mZFucTXSGMFA
  SS58 Address:      5CfodrEFe64MJtWvfhTHYBuUySr4WXLv2B41mZFucTXSGMFA

julia> @pipe hex2bytes("1ac50afda84f433ad094930ff4f1057c03f33bb11ae6956c33bde02661348d1d") |> Int.(_) |> join(_, ", ")
"26, 197, 10, 253, 168, 79, 67, 58, 208, 148, 147, 15, 244, 241, 5, 124, 3, 243, 59, 177, 26, 230, 149, 108, 51, 189, 224, 38, 97, 52, 141, 29"

> subxt explore --file ./res/metadata.scale Sudo calls set_key '{ new: Id (((26, 197, 10, 253, 168, 79, 67, 58, 208, 148, 147, 15, 244, 241, 5, 124, 3, 243, 59, 177, 26, 230, 149, 108, 51, 189, 224, 38, 97, 52, 141, 29))) }'
Encoded call data:
    0x90041402001ac50afda84f433ad094930ff4f1057c03f33bb11ae6956c33bde02661348d1d

> cargo run -- -S cesium tech propose 1402001ac50afda84f433ad094930ff4f1057c03f33bb11ae6956c33bde02661348d1d 47

On remarque que j’ai dû retirer le préfixe 0x9004 pour que le call soit décodé correctement. Mais c’est cohérent avec ce que dit l’app polkadotjs :