Skip to main content

avalanche_types/codec/
mod.rs

1//! Implementation of the avalanchego codec.
2pub mod serde;
3
4use std::collections::HashMap;
5
6use lazy_static::lazy_static;
7
8pub const VERSION: u16 = 0;
9
10lazy_static! {
11    /// ref. <https://pkg.go.dev/github.com/ava-labs/avalanchego/codec#Registry>
12    /// ref. <https://github.com/ava-labs/avalanchego/blob/v1.9.11/vms/avm/txs/codec.go>
13    /// ref. <https://github.com/ava-labs/avalanchego/blob/v1.7.9/vms/avm/codec_registry.go>
14    /// ref. <https://github.com/ava-labs/avalanchego/blob/v1.7.9/codec/reflectcodec/type_codec.go#L128-L131>
15    ///     (used for encoding Go interface type into a "struct")
16    pub static ref X_TYPES: HashMap<String, usize> = {
17        let mut m = HashMap::new();
18        m.insert("avm.BaseTx".to_string(), 0);
19        m.insert("avm.CreateAssetTx".to_string(), 1);
20        m.insert("avm.OperationTx".to_string(), 2);
21        m.insert("avm.ImportTx".to_string(), 3);
22        m.insert("avm.ExportTx".to_string(), 4);
23        m.insert("secp256k1fx.TransferInput".to_string(), 5);
24        m.insert("secp256k1fx.MintOutput".to_string(), 6);
25        m.insert("secp256k1fx.TransferOutput".to_string(), 7);
26        m.insert("secp256k1fx.MintOperation".to_string(), 8);
27        m.insert("secp256k1fx.Credential".to_string(), 9);
28        m.insert("nftfx.MintOutput".to_string(), 10);
29        m.insert("nftfx.TransferOutput".to_string(), 11);
30        m.insert("nftfx.MintOperation".to_string(), 12);
31        m.insert("nftfx.TransferOperation".to_string(), 13);
32        m.insert("nftfx.Credential".to_string(), 14);
33        m.insert("propertyfx.MintOutput".to_string(), 15);
34        m.insert("propertyfx.OwnedOutput".to_string(), 16);
35        m.insert("propertyfx.MintOperation".to_string(), 17);
36        m.insert("propertyfx.BurnOperation".to_string(), 18);
37        m.insert("propertyfx.Credential".to_string(), 19);
38        m
39    };
40
41    /// ref. <https://github.com/ava-labs/avalanchego/blob/v1.9.11/vms/platformvm/txs/codec.go>
42    ///     (used for encoding Go interface type into a "struct")
43    pub static ref P_TYPES: HashMap<String, usize> = {
44        let mut m = HashMap::new();
45        m.insert("platformvm.ProposalBlock".to_string(), 0);
46        m.insert("platformvm.AbortBlock".to_string(), 1);
47        m.insert("platformvm.CommitBlock".to_string(), 2);
48        m.insert("platformvm.StandardBlock".to_string(), 3);
49        m.insert("platformvm.AtomicBlock".to_string(), 4);
50
51        m.insert("secp256k1fx.TransferInput".to_string(), 5);
52        m.insert("secp256k1fx.MintOutput".to_string(), 6);
53        m.insert("secp256k1fx.TransferOutput".to_string(), 7);
54        m.insert("secp256k1fx.MintOperation".to_string(), 8);
55        m.insert("secp256k1fx.Credential".to_string(), 9);
56        m.insert("secp256k1fx.Input".to_string(), 10);
57        m.insert("secp256k1fx.OutputOwners".to_string(), 11);
58
59        m.insert("platformvm.AddValidatorTx".to_string(), 12);
60        m.insert("platformvm.AddSubnetValidatorTx".to_string(), 13);
61        m.insert("platformvm.AddDelegatorTx".to_string(), 14);
62        m.insert("platformvm.CreateChainTx".to_string(), 15);
63        m.insert("platformvm.CreateSubnetTx".to_string(), 16);
64        m.insert("platformvm.ImportTx".to_string(), 17);
65        m.insert("platformvm.ExportTx".to_string(), 18);
66        m.insert("platformvm.AdvanceTimeTx".to_string(), 19);
67        m.insert("platformvm.RewardValidatorTx".to_string(), 20);
68        m.insert("platformvm.StakeableLockIn".to_string(), 21);
69        m.insert("platformvm.StakeableLockOut".to_string(), 22);
70
71        // Banff additions
72        m.insert("platformvm.RemoveSubnetValidatorTx".to_string(), 23);
73        m.insert("platformvm.TransformSubnetTx".to_string(), 24);
74        m.insert("platformvm.AddPermissionlessValidatorTx".to_string(), 25);
75        m.insert("platformvm.AddPermissionlessDelegatorTx".to_string(), 26);
76
77        m.insert("signer.Empty".to_string(), 27);
78        m.insert("signer.ProofOfPossession".to_string(), 28);
79
80        m
81    };
82}