chaintope/tapyrus-signer

Parsing federations.toml is failure when it has non-member federation.

rantan opened this issue · 0 comments

TOML file has two federations and the first one is non-member federation. So it doesn't have node-vss item but we got following error.

called `Result::unwrap()` on an `Err` value: InvalidTomlFormat(Error { inner: ErrorInner { kind: Custom, line: Some(5), col: 8, at: Some(159), message: "missing field `node-vss`", key: ["federation"] } })
thread 'federation::tests::test_from_pubkey_and_toml' panicked at 'called `Result::unwrap()` on an `Err` value: InvalidTomlFormat(Error { inner: ErrorInner { kind: Custom, line: Some(5), col: 8, at: Some(159), message: "missing field `node-vss`", key: ["federation"] } })', src/federation.rs:495:27

Even if I add node-vss = [] , we also got following error.

called `Result::unwrap()` on an `Err` value: InvalidTomlFormat(Error { inner: ErrorInner { kind: Custom, line: Some(5), col: 8, at: Some(159), message: "missing field `node-vss`", key: ["federation"] } })
thread 'federation::tests::test_from_pubkey_and_toml' panicked at 'called `Result::unwrap()` on an `Err` value: InvalidTomlFormat(Error { inner: ErrorInner { kind: Custom, line: Some(5), col: 8, at: Some(159), message: "missing field `node-vss`", key: ["federation"] } })', src/federation.rs:495:27

test code.

    #[test]
    fn test_from_pubkey_and_toml() {
        let pubkey = PublicKey::from_str(
            "02472012cf49fca573ca1f63deafe59df842f0bbe77e9ac7e67b211bb074b72506",
        )
        .unwrap();

        // ...

        // valid toml. It has a federation dosen't includes the node.
        let toml = r#"
        [[federation]]
        block-height = 0
        aggregated-public-key = "030d856ac9f5871c3785a2d76e3a5d9eca6fcce70f4de63339671dfb9d1f33edb0"

        [[federation]]
        block-height = 100
        threshold = 2
        aggregated-public-key = "030acd6af981c498ebf2ffd9a341d2a96bde5832c150e7d300fa3583eee0f964fe"
        node-vss = [
          "02472012cf49fca573ca1f63deafe59df842f0bbe77e9ac7e67b211bb074b7250602472012cf49fca573ca1f63deafe59df842f0bbe77e9ac7e67b211bb074b725060002472012cf49fca573ca1f63deafe59df842f0bbe77e9ac7e67b211bb074b72506bb360eeb9d77cc606471ca455eb68331fbbdab6d009da456bef3920a61222f58df14e215a3883ff8c8def6bdce4d9d80282749b8056ec72373a246b3de5aa120b336d88a9b977a2f2ff5f26a1633f70f2d776363c495a02617bb7a88a2fea285a0a0e33e16dd90acb06b22fc70086f7eb12cdfeb7eb622d8a455de1f448fd30a472012cf49fca573ca1f63deafe59df842f0bbe77e9ac7e67b211bb074b7250644c9f1146288339f9b8e35baa1497cce04425492ff625ba9410c6df49eddccd761c1af39b4fcbe4e3a240848bc90f41681ec105286684d4832efdc5b96a0e027286d9f7d22ad52194da7d522e5586ce268c7fde21220aca78e21d1d1a5d69f2468fff1b0f8a3a142cf0e1c7d29cbe3e509c437cd680ab21715cb5c1844d2eff8",
          "02ce7edc292d7b747fab2f23584bbafaffde5c8ff17cf689969614441e0527b90002472012cf49fca573ca1f63deafe59df842f0bbe77e9ac7e67b211bb074b725060002ce7edc292d7b747fab2f23584bbafaffde5c8ff17cf689969614441e0527b90015ea9fee96aed6d9c0fc2fbe0bd1883dee223b3200246ff1e21976bdbc9a0fc81f4be7002fae5b70835ee7e51893f76dd840ea64010504b8c66197d9cad767236a786cc7b91146df5e8d1ff73ad220b3578359eda61c341a8b5c41de6b068f73696b619f9213a550d0bc159ba1ff43c4e90c85930904a6f7f582b52074e3d965ce7edc292d7b747fab2f23584bbafaffde5c8ff17cf689969614441e0527b900ea156011695129263f03d041f42e77c211ddc4cdffdb900e1de689414365ec672ad0d285c094287a3e2cc42d88e0736a1e238f33cde1ef9bd1cd9a0e8fe4a37dec94b7927535da68f388e4d5f07e838b71c742302476336b68f47b2e802b8c88a0fd87b9acc67ab564501a9777cf6081f50798b2ae8f2dff8a5190a27cfaf0e3",
          "03831a69b8009833ab5b0326012eaf489bfea35a7321b1ca15b11d88131423fafc02472012cf49fca573ca1f63deafe59df842f0bbe77e9ac7e67b211bb074b725060002831a69b8009833ab5b0326012eaf489bfea35a7321b1ca15b11d88131423fafc36efd8a52e2a27a50650b7e1f7db835c1f7fe5f7e587fb43e0009068b96d6ed35b71e1d42c2b7755bc33a7408032915da2a640b1b4227e13cd28efafc9e4af50fa777e082bd1afc64a4c2a67379df5a49233b6f003b96625f25f8dbe14fc7478fb75efb0cbcf147375065344b5c5f802bcd9057740983297749375b21d876d26831a69b8009833ab5b0326012eaf489bfea35a7321b1ca15b11d88131423fafcc910275ad1d5d85af9af481e08247ca3e0801a081a7804bc1fff6f9646928d5c8f2a6c11c0fa9382aff7496614860f05779d3a0c5e6813db99d4b53417ac77c624171c6f14d272660f2556c9db9e3cca3e05a814a09fd5952dac72e18c7851c518063e5896e261aef163636449d673aba880160e57b5beee92362d74b5eb71dd"
        ]
        "#;

        let federations = Federations::from_pubkey_and_toml(&pubkey, toml).unwrap();
        assert_eq!(federations.len(), 2);

        // ...
    }